如何以人类可读的方式指示函数在 scala 中的函数中返回



作为 scala 的初学者,我在 scala 中编写了一个返回另一个函数的方法:

def foo(fnords: Seq[Fnord]): Poit => Boolean {
  (poit: Poit) => {
      fnords.contains(poit.fnord)
  }
}

注意到我经常对自己的代码行感到困惑,想知道为什么我会回来

fnords.contains(poit.fnord)

即使我实际上正确地返回了整个函数:

(poit: Poit) => {
  fnords.contains(poit.fnord)
}

我想知道是否可以让人眼更明确地返回可调用对象,或者这是否是编写 scala 时必须习惯的事情。

我发现可能的方法是显式使用return,然后 linter 通过"return 关键字是多余的"发出警告:

def foo(fnords: Seq[Fnord]): Poit => Boolean {
  return (poit: Poit) => {
      fnords.contains(poit.fnord)
  }
}

我知道我可以将函数存储在变量中,但它也感觉像在不写入 return 的情况下执行显式返回:

def foo(fnords: Seq[Fnord]): Poit => Boolean {
  val filterFunction = (poit: Poit) => {
      fnords.contains(poit.fnord)
  }
  filterFunction
}

有没有另一种方法可以提供在 scala 中返回可调用对象的反馈?

你可以

把它写成函数

def foo(fnords: Seq[Fnord]): Poit => Boolean =
    (poit: Poit) => fnords.contains(poit.fnord)

或者只是

def foo(fnords: Seq[Fnord]): Poit => Boolean =
    poit => fnords.contains(poit.fnord)

或作为方法

def foo(fnords: Seq[Fnord])(poit: Poit): Boolean =
    fnords.contains(poit.fnord)

并使用它

val f: Poit => Boolean = foo(Seq(fnord))
f(poit)

符合我的口味

def foo(fnords: Seq[Fnord]): Poit => Boolean = {
  val filterFunction = (poit: Poit) => fnords.contains(poit.fnord)
  filterFunction
}

没关系。

最新更新