我有一些特征“Foo”,并带有一些方法。我想把这个特点混合到任何一个班级。但我不想写类似的东西在运行时将特定特征添加到类
val b = new Bar with Foo
我需要类似的地方,我只是通过一个类,它与Foo混合。我只想与这个特征混合在一起,即所有类别只与Foo特征混合是固定的。我发现这个post但我不相信。
在scala中可以这样做吗?
我有一些特征“Foo”,并带有一些方法。我想把这个特点混合到任何一个班级。但我不想写类似的东西在运行时将特定特征添加到类
val b = new Bar with Foo
我需要类似的地方,我只是通过一个类,它与Foo混合。我只想与这个特征混合在一起,即所有类别只与Foo特征混合是固定的。我发现这个post但我不相信。
在scala中可以这样做吗?
目前最好的解决方案是实现Foo
是这样的:
class Foo(bar:Bar) {
...
}
object Foo {
def apply(bar:Bar) = new Foo(bar)
implicit def backToBar = this.bar
}
然后用它作为
val foo = Foo(myBar)
对于在Foo
Foo
和Bar
,版本之间共享的任何方法名将被使用(就像在mixin中重载一样)。任何其他方法,将使用Bar
的变体。
该技术并不完美,Bar
中的方法只会调用Bar
中定义的其他方法,并且决不会在Foo
中定义的“过载”。否则,它非常接近您的需求。
我是新来的斯卡拉,但上面的代码在交互式斯卡拉壳无法正常工作,其他的事情吧是可变的,即它可以(酒吧与Foo)或(嘘与Foo),我没有得到上面的代码,它究竟做了什么 – 2010-11-22 11:11:48
您是否在该工厂示例中传递_type_“Bar”或“Bar”的_instance_?如果是后者,这是不可能的,尽管隐式转换通常是足够的。 – 2010-11-19 20:15:29
作为一个类型'酒吧' – 2010-11-22 09:52:52