私は、混在すると、メソッドのデフォルト定義を元のメソッドを呼び出すものに置き換えて、それを操作する特性を作成しようとしています。結果。スカラの自己型付き形質でスーパークラスのメソッドを呼び出す
は、ここで私がやろうとしているものです:
class Foo {
def bar() : String = "Foos bar"
}
trait OtherStuff {
self : Foo =>
def bar() : String = self.bar() + " with OtherStuff"
}
class Quux extends Foo with OtherStuff
これは、私はそれは、その後、(new Quux).bar
は今Foos bar with OtherStuff
を返すでしょうしたかった道を働いた場合。
<console>:6: error: error overriding method bar in class Foo of type()String;
method bar in trait OtherStuff of type()String needs `override' modifier
class Quux extends Foo with OtherStuff
しかしOtherStuff
を定義するとき、私はoverride
を使用している場合、私が手:: - 残念ながら、それはそのように動作していない私が得るものはある
<console>:7: error: method bar overrides nothing
override def bar() : String = self.bar() + " with OtherStuff"
それがでメソッドをオーバーライドすることは可能です形質を使った自己型?ない場合は、特色であることをOtherStuff
を変更しますextends Foo
その代わりにFoo
の自己型を持つ1私はScalaの2.7で働いている
class WhatEver extends Foo with Xyz with Pqr with OtherStuff with Abc
ようなことを言って存在するすべてのコードに悪い何でもします。 7これはsbtビルドルールであり、まだsbtプロジェクトを0.10.xバージョンにアップグレードしていないためです。 (依存しているプラグインはまだ準備ができていません)
OtherStuffが私のロジック内のFooでない場合はどうなりますか? extendig Fooのない別の解決策はありませんか?または私はここで自己タイピングを虐待していますか? – Radian
@Dupont:クラスQuuxはOtherStuffを拡張してFooを継承から取得するのではなく、FooをOtherStuffで拡張する必要があるのはなぜですか? – polo