首先,定义一个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)
只有一种情况可以匹配。你需要将它们嵌套在一起,这样2可以被认为是正面甚至是正确的,或者我在这里忽略了这一点? – agilesteel
是的,我正在描述类似于模式匹配的东西,其中可以返回> 1个匹配。 –