我创建了一个对象,用于说明案例类的用法:
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));
}
Run Code Online (Sandbox Code Playgroud)
并且代码无法编译并给出错误
错误:预期为“ =>”,但找到了“(”
现在我改变以下
case person : Person(firstName,lastName) => s" You gave me a Person Object with ${person.firstName} ${person.lastName}";
Run Code Online (Sandbox Code Playgroud)
至
case person @ Person(firstName,lastName) => s" You gave me a Person Object with ${person.firstName} ${person.lastName}";
Run Code Online (Sandbox Code Playgroud)
代码编译并成功运行。
现在我改变
case str : String => s"you gave me a String ${str}";
Run Code Online (Sandbox Code Playgroud)
至
case str @ String => s"you gave me a String ${str}";
Run Code Online (Sandbox Code Playgroud)
它给了我一个错误:
错误:对象java.lang.String不是值
同样的情况适用于
case list : List(1,_*) // gives error
case list @ List(1,_*) // run successfully
Run Code Online (Sandbox Code Playgroud)
所以我的问题是我应该在哪里使用@而不是:
谢谢