Scala 如何从混合方法访问类字段?
我在Scala中使用mixin和traits,遇到了一个小问题,如何(不重写)从mixin访问类字段 这是我的密码:Scala 如何从混合方法访问类字段?,scala,mixins,traits,Scala,Mixins,Traits,我在Scala中使用mixin和traits,遇到了一个小问题,如何(不重写)从mixin访问类字段 这是我的密码: trait Friend { def getHelp() = "Gets help" } trait Speak { def speak(): String } class Person(var name: String) extends Speak with Friend { override def speak() = s"Hello, I am $name"
trait Friend {
def getHelp() = "Gets help"
}
trait Speak {
def speak(): String
}
class Person(var name: String) extends Speak with Friend {
override def speak() = s"Hello, I am $name"
}
class Dog(var name: String) extends Speak with Friend {
override def speak() = "woof woof!"
}
class Cat(var name: String) extends Speak {
override def speak() = "meow!"
}
其实没什么特别的,但现在我把Friend
混合到Cat
val felix = new Cat("Felix") with Friend
println(felix.getHelp) // prints "Gets help"
我该怎么写,这样它就不会说“得到帮助”,而是说“Felix得到帮助”?
也就是说,从name
字段中获取值,而不必在类定义中扩展Friend
?(我不希望所有的Cat
实例也成为朋友
)动态:
val fred = new Cat("Fred") with Friend {
override def getHelp() = {
name + " " + super.getHelp()
}
}
println(fred.getHelp())
或者使用另一个特征:
trait FriendWithName extends Friend {
var name: String
override def getHelp() = {
name + " " + super.getHelp()
}
}
val barney = new Cat("Barney") with FriendWithName
println(barney.getHelp())
或者完全没有trait Friend
:
val wilma = new Cat("Wilma") {
def getHelp() = {
name + " gets help"
}
}
在飞行中:
val fred = new Cat("Fred") with Friend {
override def getHelp() = {
name + " " + super.getHelp()
}
}
println(fred.getHelp())
或者使用另一个特征:
trait FriendWithName extends Friend {
var name: String
override def getHelp() = {
name + " " + super.getHelp()
}
}
val barney = new Cat("Barney") with FriendWithName
println(barney.getHelp())
或者完全没有trait Friend
:
val wilma = new Cat("Wilma") {
def getHelp() = {
name + " gets help"
}
}
在飞行中:
val fred = new Cat("Fred") with Friend {
override def getHelp() = {
name + " " + super.getHelp()
}
}
println(fred.getHelp())
或者使用另一个特征:
trait FriendWithName extends Friend {
var name: String
override def getHelp() = {
name + " " + super.getHelp()
}
}
val barney = new Cat("Barney") with FriendWithName
println(barney.getHelp())
或者完全没有trait Friend
:
val wilma = new Cat("Wilma") {
def getHelp() = {
name + " gets help"
}
}
在飞行中:
val fred = new Cat("Fred") with Friend {
override def getHelp() = {
name + " " + super.getHelp()
}
}
println(fred.getHelp())
或者使用另一个特征:
trait FriendWithName extends Friend {
var name: String
override def getHelp() = {
name + " " + super.getHelp()
}
}
val barney = new Cat("Barney") with FriendWithName
println(barney.getHelp())
或者完全没有trait Friend
:
val wilma = new Cat("Wilma") {
def getHelp() = {
name + " gets help"
}
}