我有一些特徵「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