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

时间:2017-11-13 17:56:40

标签: scala syntax

作为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警告反对通过"返回关键字是多余的":

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中返回callable的反馈?

1 个答案:

答案 0 :(得分:1)

您可以将其编写为函数

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
}

没问题。