作为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的反馈?
答案 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
}
没问题。