私は一連の連鎖関数呼び出しを通じて値を構築しています(すべての結果はタイプです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
その場合は、オプションの値を2番目のパラメーターとして渡します。これは次と同等です。
val tmp: B = someFunc()
.map(func1)
.map(func2)
val b = o.fold{b}{v => func3(tmp, v)}
しかし、私はコールチェーンを壊したくありません。これを行うための慣用的な方法はありますか?
明らかにシンプルだがエレガントではない解決策は次のとおりです。
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 ) )
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加