В программе лестницы я создал случай, чтобы соответствовать пользователю, после некоторых фрагментов из 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
Таким образом, мой вопрос заключается в том, как просто ссылаться на внутренний класс в случае case в Scala.
Это именно мой вопрос - почему метод не может быть в классе, но сейчас, это решает мою проблему, уточнив, что по какой-то причине, реализация объекта компаньона Исключить метода, что используются. . благодаря! – jayunit100
Рассмотрим ваш пример, у вас есть класс, который принимает строку как параметр, если метод unapply был определен в классе, как должен компилятор его назвать? Он не может определять новый класс курса, и он не может назвать недопустимым совпадение текущего класса, поскольку он еще не знает его тип (т. Е. Вы не знаете, можете ли вы вызвать метод unapply). –