Kev*_*ith 57 scala pattern-matching
鉴于此Person
案例类:
scala> case class Person(name: String, age: Int) {}
defined class Person
Run Code Online (Sandbox Code Playgroud)
......而这个例子
scala> val b = Person("Kevin", 100)
b: Person = Person(Kevin,100)
Run Code Online (Sandbox Code Playgroud)
是否有理由喜欢这个代码(有@
)
scala> b match {
| case p @ Person(_, age) => println("age")
| case _ => println("none")
| }
age
Run Code Online (Sandbox Code Playgroud)
...以下?
scala> b match {
| case Person(_, age) => println("age")
| case _ => println("none")
| }
age
Run Code Online (Sandbox Code Playgroud)
也许我错过了意义/力量@
?
whe*_*ies 94
您只需要包含@
您想要处理对象本身的时间.因此:
that match{
case p @ Person(_, age) if p != bill => age
case Person(_, age) => age - 15
case _ => println("Not a person")
}
Run Code Online (Sandbox Code Playgroud)
否则,包含它并没有真正的意义.
关于上述答案的评论.
考虑这个案例类.
case class Employee(name: String, id: Int, technology: String)
Run Code Online (Sandbox Code Playgroud)
在进行模式匹配时.
case e @ Employee(_, _, "scala") => e.name // matching for employees with only scala technology ... it works
case x: Employee => x.name // It also works
case e: Employee(_, _, "scala") => e.name // matching for employees with only scala technology ... **wont't work**
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13334 次 |
最近记录: |