まず、次のようにmultimatch関数を定義:
scala> def multimatch[A,B](value : A,ps: (A => Boolean, B)*) =
| for (p <- ps
| if (p._1(value))) yield p._2
multimatch: [A,B](value: A,ps: ((A) => Boolean, B)*)Seq[B]
その後ここに行きます:
scala> multimatch(2,
| (((x :Int) => x > 0) -> "POSITIVE"),
| (((x :Int) => x < 0) -> "NEGATIVE"),
| (((x :Int) => x % 2 == 0) -> "EVEN")
| )
res4: Seq[java.lang.String] = ArrayBuffer(POSITIVE, EVEN)
または、あまり混乱しない:
scala> multimatch(2,
| ((x :Int) => x > 0 , "POSITIVE"),
| ((x :Int) => x < 0, "NEGATIVE"),
| ((x :Int) => x % 2 == 0, "EVEN")
| )
res5: Seq[java.lang.String] = ArrayBuffer(POSITIVE, EVEN)
一致するケースは1つだけです。あなたはそれらを入れ子にする必要がありますので、2が肯定的であると認識されることがありますか? – agilesteel
ええ、私はパターンマッチングに似た何かを説明しています。ここで> 1マッチが返されます。 –