3

Scala の f-bounded ポリモーフィズムは、一般的に型の上限自己型の境界で実装されるのはなぜですか?

trait MyTrait[A <: MyTrait[A]] { self: A =>
  …
}

単純に自己型だけではありません

trait MyTrait[A] { self: A =>
  …
}

最初の例の型の上限は不要のようです。少なくとも私はそれを使用する利点を見つけることができません。ここで何かを見落としていますか?ただし、型の境界は次のような使用法を妨げます

def func[A](implicit ev: A <:< MyTrait[A]) = ???

(もちろん、この単純化された不自然な例でfunc[A <: MyTrait[A]]は問題を解決できますが、より複雑な設定では不可能な場合があります)

複数のライブラリでバインドされた型で実装されたf-bounded ポリモーフィズムを見つけ、トピックに関する入門ブログ投稿 ( https://tpolecat.github.io/2015/04/29/f-bounds.html ) でさえ、疑問に思っていました。一般的にバインドされた型を省略した方がよい場合。

4

1 に答える 1