假设我有一个Tree
个对象,其中包含2个成员对象,right
和left
。
检查tree
的“右”和“左”字段是否为Nil的惯用/正确方法是什么?
def count(tree: Tree, acc: Int) : Int = tree match {
case tree .right != Nil && tree .left != Nil => countLeftAndRight(...)
case tree .right != Nil => countOnlyRight(...)
case tree .left != Nil => countOnlyLeft(...)
_ => acc
}
答案 0 :(得分:4)
您的示例无效Scala,但匹配Tree的惯用方法是使用提取器(查找它)。如果Tree
是一个案例类,你可以免费获得。假设是,你可以写
tree match {
case Tree(Nil, Nil) => acc
case Tree(Nil, x) => ...
case Tree(x, Nil) => ...
case Tree(x, y) => ...
}
答案 1 :(得分:3)
或者,如果您希望按原样使用非案例类Tree
,那么您可以尝试使用Luigi解决方案的这种变体:
(tree.left, tree.right) match {
case (Nil, Nil) => acc
case (Nil, x) => ...
case (x, Nil) => ...
case (x, y) => ...