phi*_*eas 2 functional-programming scala pattern-matching
在使用even()它时,它仅匹配unapply和使用时的真实条件even,这仍然如何打印"Is even"
object even{
def unapply(arg: Int): Boolean = (arg%2 == 0)
}
object singleDigit{
def unapply(arg: Int): Option[Boolean] = {
if(arg < 10) Some(true)
else None
}
}
val n = 9
n match {
case even() => println("Is even")
case singleDigit => println("is single")
case _ => println("No property")
}
//This gives "is single"
n match {
case even => println("Is even")
case singleDigit => println("is single")
case _ => println("No property")
}
//This gives "Is even"
Run Code Online (Sandbox Code Playgroud)
n = 9作为奇数如何满足偶数情况?这种模式匹配内的even和even()之间有什么区别?
该case even =>实际上是一个可变的模式,是不是指even.unapply由编译器警告的暗示
Warning:(19, 9) patterns after a variable pattern cannot match (SLS 8.1.1)
If you intended to match against object even in class A$A3, you must use backticks, like: case `even` =>
case even => println("Is even")
^
Run Code Online (Sandbox Code Playgroud)
您刚巧给它起了相同的名字,但是您可以写
n match {
case foo => println("Is even")
...
}
Run Code Online (Sandbox Code Playgroud)
Is even由于可变图案位于第一个位置,因此仍会打印出来。
| 归档时间: |
|
| 查看次数: |
39 次 |
| 最近记录: |