scala中的函数如何匹配?

scala中的函数如何匹配?,scala,Scala,为什么在这种情况下,如果包含值的参数​​是x吗?这是因为案例y意味着对所有事物进行模式化,并将变量命名为y,因此它基本上是在创建一个引用同一对象的新变量。 然而,这是一个糟糕的模式匹配使用 更好的选择是: case class Person(name:String,age:Int) val p1 = Person("Maria",18) def h(x:Person) = x match{ case y if y.age >17 => "Adult" case z if z.

为什么在这种情况下,如果包含值的参数​​是x吗?

这是因为案例y意味着对所有事物进行模式化,并将变量命名为y,因此它基本上是在创建一个引用同一对象的新变量。 然而,这是一个糟糕的模式匹配使用

更好的选择是:

case class Person(name:String,age:Int)

val p1 = Person("Maria",18)

def h(x:Person) = x match{
 case y if y.age >17 => "Adult"
 case z if z.age <=17 => "Younger"  
}
或者只使用if/else:


我不同意第一种选择更好;对人的定义的改变更有可能打破它。@阿列克谢罗曼诺夫,一些人可能认为这是件好事,因为数据模型的改变通常是有意义的。但是,我不想讨论这个问题。对于本例中的better,我指的是模式匹配的使用,因为原始代码并不是真正的模式匹配。出于这个原因,我还提出了if/else替代方案,该方案更短,可读性更强。
def h(person: Person): String = person match {
  case Person(_, age) if (age > 17) => "Adult"
  case _ => "Younger" // Checking the age here is redudant.
}
def h(person: Person): String =
  if (person.age > 17) "Adult"
  else "Younger"