1

Tree2 つのメンバー オブジェクトを持つオブジェクトがある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
}
4

2 に答える 2

4

あなたの例は有効なScalaではありませんが、ツリーを一致させる慣用的な方法は抽出器を使用することです(調べてください)。Treeがケースクラスの場合、これは無料で入手できます。そうであると仮定すると、次のように書くことができます

tree match {
  case Tree(Nil, Nil) => acc
  case Tree(Nil, x) => ...
  case Tree(x, Nil) => ...
  case Tree(x, y) => ...
}
于 2013-08-17T02:47:52.383 に答える
3

または、非ケースクラスTreeをそのまま使用したい場合は、Luigi のソリューションの次のバリエーションを試すことができます。

(tree.left, tree.right) match {
  case (Nil, Nil) => acc
  case (Nil, x) => ...
  case (x, Nil) => ...
  case (x, y) => ...
于 2013-08-17T03:08:49.910 に答える