2017-01-29 5 views
2

Я только учусь Scala, и у меня есть эти три файла:Ошибки с Mixins в Scala

abstract class Animal() { 
    name 
    sound 
} 



class Dog(n : String) extends Animal { 
    name = n 
    val sound = "Boof" 
} 

trait Speaking extends Animal { 
    def speak(n : String, s : Sound) : String = { 
     println(s + "! I'm " + n + "!") 
    } 
} 

В моем основном методе, у меня есть следующий код:

d = new Dog("Maddie") with Speaking 
println(d.speak) 

Когда я бегу этот код, я получаю ошибку: не найден: значение d

ответ

2

Положите val до d, если вы еще не заявили об этом.

0

Я думаю, что это должно быть что-то вроде этого:

abstract class Animal() { 
    def name: String // You need a type(String) and a qualifier(def) 
    def sound: String // the same 
} 

class Dog(n : String) extends Animal { 
    // Type is not obligatory here, as it is inherited from Animal. 
    // But you still need a qualifier(val) 
    val name = n 
    val sound = "Boof" 
} 

trait Speaking extends Animal { 
    // This method doesn't need those params, 
    // since this trait extends Animal, 
    // so it has access to name and sound defined there. 
    def speak: String = { 
    sound + "! I'm " + name + "!" 
    } 
} 

Ваш основной метод остается тем же самым.

Смежные вопросы