【发布时间】:2015-06-27 14:23:48
【问题描述】:
我创建了一个对象来演示案例类的用法:
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 case-class