我通过一系列链接函数调用构建一个值(所有结果都是B
类型):
val o: Option[String] = ...
val b: B = someFunc()
.map(func1)
.map(func2)
.map(/* want to apply func3 here if o.isDefined)
现在,我只有在func3: (B, String) => B
定义的情况下才会应用o
,在这种情况下,我还希望将选项的值作为第二个参数传递给它。这相当于:
val tmp: B = someFunc()
.map(func1)
.map(func2)
val b = o.fold{b}{v => func3(tmp, v)}
但我不想打破调用链。任何惯用的方法吗?
答案 0 :(得分:1)
明显简单但不优雅的解决方案如下:
val b = someFunc().map(func1).map(func2)
.map( a => if( o.isDefined ) func3( a, v ) else a )
以下是您建议的修改版本:
val b = someFunc().map(func1).map(func2)
.map( a => o.foldLeft( a )( func3 ) )