Scala中的mixin错误
我正在学习Scala,我有以下三个文件:Scala中的mixin错误,scala,Scala,我正在学习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(
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将
val
放在d
之前,如果您以前没有声明它。我认为应该是这样的:
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 + "!"
}
}
您的主要方法保持不变