2017-01-29 23 views
2

Ich Scala nur zu lernen, und ich habe diese drei Dateien:Fehler bei Mixins in 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 + "!") 
    } 
} 

In meinem Haupt-Methode, ich habe den folgenden Code:

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

Wenn ich laufen Dieser Code, ich bekomme Fehler: nicht gefunden: Wert d

Antwort

2

Setzen Sie val vor d, wenn Sie es zuvor nicht erklärt haben.

0

Ich denke, es ist so etwas wie dies sein sollte:

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 + "!" 
    } 
} 

Ihre wichtigste Methode bleibt gleich.