sna*_*ppy 16 functional-programming scala
如何在功能样式中重构此代码(scala惯用)
def findFirst[T](objects: List[T]):T = {
for (obj <- objects) {
if (expensiveFunc(obj) != null) return obj
}
null.asInstanceOf[T]
}
Run Code Online (Sandbox Code Playgroud)
sep*_*p2k 22
这几乎就是该find
方法所做的,除了它返回一个Option
.因此,如果您想要这种确切的行为,您可以添加一个调用Option.orNull
,如下所示:
objects.find(expensiveFunc).orNull
Run Code Online (Sandbox Code Playgroud)
首先,不要null
在Scala中使用(除了与Java代码交互时),而不要使用Options.其次,用递归替换循环.第三,看看Scala函数的丰富API,你正在寻找的方法已经存在,如sepp2k所指出的那样.
为了学习puprose,你的例子可以改写为:
def findFirst[T](objects: List[T]):Option[T] = objects match {
case first :: rest if expensiveFunc( first ) != null => Some( first )
case _ :: rest => findFirst( rest )
case Nil => None
}
Run Code Online (Sandbox Code Playgroud)