我试图在Scala中实现可堆叠特征模式(类似于http://www.artima.com/scalazine/articles/stackable_trait_pattern.html)。这是我的尝试。我开始定义一个简单的类:在Scala中重写带有特征的隐式setter方法
class Topping(var name:String)
该类声明应自动为名为“name”的变量创建一个getter和setter方法。于是我创建扩展该类一个特点:
trait LoggingNameTrait extends Topping {
override def name_=(aName:String) {
print(aName)
super.name_=(aName) // this line doesn't compile
}
}
如果上面的代码工作,它应该覆盖隐含二传手的“姓名”字段中,打印在控制台上,然后调用类的二传手这使用特质。我得到一个“超级可能不能用于变量名称”。
你知道为什么Scala编译器不会让我重写隐式setter吗?
'super.name _ =(aName)//这行不compile'怎么样一个简单的'super.name = aName'?为什么name_抽象的方式? – aishwarya
这不起作用。是的,我应该删除那里的抽象修饰符。谢谢! – ivanfoofoo