Я создал объект для демонстрации использования использования прецедентного класса как:переменного связывания с рисунком в случае п в выражении соответствия лестницы
object MatchWithPattern extends App
{
case class Person(firstName:String,lastName:String);
def whatYouGaveMe(obj:Any):String={
obj match {
case str : String => s"you gave me a String ${str}";
case person : Person(firstName,lastName) => s" You gave me a Person Object with ${person.firstName} ${person.lastName}";
case default => "You gave me a Any class Object";
}
}
var person= new Person("Mukesh", "Saini");
Console.println(whatYouGaveMe(person));
}
и код не компилируется и выдаю ошибку
ошибки : '=>' ожидалось, но '(' найдено
Теперь я могу изменить следующие
case person : Person(firstName,lastName) => s" You gave me a Person Object with ${person.firstName} ${person.lastName}";
в
case person @ Person(firstName,lastName) => s" You gave me a Person Object with ${person.firstName} ${person.lastName}";
код компилируется и работает успешно.
Теперь изменения
case str : String => s"you gave me a String ${str}";
в
case str @ String => s"you gave me a String ${str}";
, и это дает мне ошибку, как:
ошибка: объект java.lang.String не является значением
Тот же случай относится к
case list : List(1,_*) // gives error
case list @ List(1,_*) // run successfully
Так что мой вопрос заключается в том, что, когда я должен использовать @ вместо :
Благодаря
: Я новичок в Scala, поэтому, если вы предоставите более подробную информацию, мне будет полезно понять его более четко. – optional
Crystal clear после добавления второй строки как: String - это тип, но Person (x, y) и List (1, _ *) – optional