ブール関数を適用するためにアクセスしているベクトルのベクトルがあります。すなわち
Vector[Vector[T]]
f(myVector(i)(j))
where f is of typeの行に沿って何かを実行し
T => Boolean
ます。
しかし、これは境界チェックを行わず、本当にエレガントなものを得ることができません。
私は使用できますapplyOrElse
:
myVector.applyOrElse(i, (_:Int) => Vector.empty).applyOrElse (j, (_:Int) => defaultT)
どこでf(defaultT)
戻りfalse
ますが、関数の代わりにデフォルトの値を設定できたらいいのにと思います。
リフトを使用して を取得できますOption
が、2 番目のレベルではうまく構成できません。
myVector.lift(i) map (_.lift(j) map f getOrElse false) getOrElse false
これは機能しますが、それでも読むのは本当に難しいです。
そして、標準の if/else ブロックがあります。
if (myVector.size <= i) false
else {
val myVector2 = levelVector(i)
if (myVector2.size <= j) false
else f(myVector2(j))
}
私が達成できるよりも簡単に分解できるはずの何かのように思えます。そして、3層目を追加すると、さらに醜くなります。
他のオプションはありますか?
免責事項: これは coursera の progfun コースから改作されています