Как соотносится функция в scala? - PullRequest
0 голосов
/ 19 февраля 2020
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"  
}

Почему в случаях это относится к возрасту с y или z, если параметр, содержащий значения, равен x?

1 Ответ

6 голосов
/ 19 февраля 2020

Это потому, что case y означает шаблон все и назовите переменную y, поэтому он в основном создает новую переменную, которая ссылается на тот же объект.
Однако это плохое использование сопоставления с образцом.

Лучшей альтернативой будет:

def h(person: Person): String = person match {
  case Person(_, age) if (age > 17) => "Adult"
  case _ => "Younger" // Checking the age here is redudant.
}

Или просто используйте if / else:

def h(person: Person): String =
  if (person.age > 17) "Adult"
  else "Younger"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...