在我创建的情况下给用户相匹配Scala程序,以下从http://danielwestheide.com/blog/2012/11/21/the-neophytes-guide-to-scala-part-1-extractors.html为什么找不到这个班?
特别是一些片段,我宣布延长另一个类的类,然后我尝试的情况下对阵那个班。
user match {
case FreeUser(name) => "Hello " + name;
case PremiumUser(name) => "hello " + name;
}
这些操作都失败:就好像情况子句不请参阅FreeUser和PremiumUser类,这是出现在其上方的类定义。
class FreeUser(val name: String) extends User{
def unapply(user: FreeUser):Option[String] = Some(user.name);
}
//takes the object as input, returns the parameter used to construct it.
class PremiumUser(val name: String) extends User {
def unapply(user: PremiumUser):Option[String]= Some(user.name);
}
val name = "ASDF"
val user: User = new PremiumUser("jay");
user match {
/** This statement fails to comiple : not found, value FreeUser. **/
case FreeUser(name) => "Hello " + name;
case PremiumUser(name) => "hello " + name;
}
对于全班,你可以参考这个要点。 https://gist.github.com/anonymous/e96107f91ef0262f3268
我的问题是,因此,简单地说,如何引用Scala中的case子句中的内部类。
这也正是我的问题 - 也就是为什么该方法不能是在课堂上,但现在,这种澄清是由于某种原因,解决了我的问题,不应用方法的同伴目标的实现是使用什么。 。 谢谢! – jayunit100 2014-10-07 21:02:32
考虑你的例子,你有一个以字符串为参数的类,如果在类中定义了unapply方法,编译器应该如何调用它?它不能提供一个新的课程,他不能调用当前正在匹配的类的不适用,因为它还不知道它的类型(即你不知道是否可以调用不适用的方法)。 – 2014-10-07 21:05:23