为了解释我的问题:
类别:玩具
Trait1:像男性一样说话
Trait2:像女性一样说话
我是否可以在运行时更改玩具的行为(特征),以便有时同一对象说话像男性,有时同一对象说话像女性?
我想在运行时改变说话行为。
发布于 2012-06-16 03:25:09
Scala确实不能做到这一点。Kevin Wright的自动代理插件可以做到这一点,你可以用任意一个特征实例化和对象,而不需要将该特征作为基类的一部分。
我个人认为,试图以这种方式完成任务是与Scala的本质背道而驰的:很难,而且容易卡住。最好是设计一个不需要这些东西的解决方案--事实上,Scala粒度更倾向于泛函,它关注的是所有东西都是不可变的,并通过计算将一个对象替换为一个新对象。
发布于 2012-06-16 00:31:17
sealed trait Speaker
case object Male extends Speaker
case object Female extends Speaker
class Toy(name: String, speaks: Speaker = Male) {
def speak = speaks match {
case Male => "ugh"
case Female => "What time do you call this?"
}
}然后
barbie = ken.copy(speaks = Female)不能更改对象在运行时扩展的trait,因为混合使用trait来创建类(在.class文件中)。一个给定的对象只有一个类,这是永远不能改变的。
https://stackoverflow.com/questions/11054299
复制相似问题