我发现我经常需要链接在一起工作的函数Option并返回不同的函数,Option如下所示:
if(foo.isDefined) someFunctionReturningOption(foo.get) else None
Run Code Online (Sandbox Code Playgroud)
有更清洁的方法吗?对于更复杂的变量,这种模式变得非常冗长.
我在表单处理代码中看到了一些必须处理可选数据的问题.None如果值是None或某些转换(可能会失败),它将插入,如果有一些值.
你可以使用flatMap:
foo.flatMap(someFunctionReturningOption(_))
Run Code Online (Sandbox Code Playgroud)
或者在理解中:
for {
f <- foo
r <- someFunctionReturningOption(f)
} yield r
Run Code Online (Sandbox Code Playgroud)
将这些函数的多个实例链接在一起时,首选for-comprehension,因为它们会降低flatMaps.