检查会员是否为零

时间:2013-08-17 02:07:01

标签: scala

假设我有一个Tree个对象,其中包含2个成员对象,rightleft

检查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
}

2 个答案:

答案 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) => ...