在我創建的情況下給用戶相匹配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