2ブロックのコードでは、両方のブロックのself
参照がFoo [A]であると予想されました。しかし、2番目のブロックがコンパイルされないようです。誰かがself
の参照を解決する方法を私に説明できますか?この場合の自己参照を解決するにはどうすればよいですか?
trait Foo[A] {
def format(value:A):String
def bar[B](f:B=>A):Foo[B] = {
val self = this
new Foo[B] {
override def format(value: B): String = self.format(f(value))
}
}
}
trait Foo[A] {
def format(value:A):String
val self = this
def bar[B](f:B=>A):Foo[B] = {
new Foo[B] {
override def format(value: B): String = self.format(f(value))
}
}
}
良いキャッチです。私は頭を傷つけていた。 'private [this] val self:Foo [A] = this'これはうまくコンパイルされます。 – pedrofurla
これを徹底的に説明する時間をとってくれてありがとう。わかった。それを得られない人たちのために、抽象化の前にまずAとBを具体的な時間に置き換えるのが助けになると思います。 – laiboonh