我有一个向量向量,我正在访问它以应用布尔函数。IE
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
但我希望我可以设置一个默认值而不是一个函数。
我可以使用 lift 给我一个Option
,但它在第二级的组合并不好:
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))
}
它似乎应该比我能实现的更容易分解。如果我添加第三层,它会变得更加丑陋。
还有其他选择吗?
免责声明:这是改编自 coursera 的 progfun 课程