次のようなクラスを書きたいと思います。
class Store[+A](dest: Symbol)(implicit c: String => A) extends Action(dest) {
override def update(options: HashMap[Symbol,Any], arg: String): Unit = {
options += ((dest -> c(arg)))
}
}
object Store {
def apply[A](dest: Symbol)(c: String=>A) = new Store[A](dest)(c)
def apply[A](dest: Symbol) = new Store[A](dest)
}
そうすることで、いくつかの問題があります。
- 文字列で暗黙的に使用すると、トラブルは尽きません
- とにかく、それらが私のモジュールで定義されている場合、システムは暗黙的なものを見つけません。クラスを作成するモジュールで定義する必要があります
- オブジェクトの 2 番目の
apply
メソッドは、消去されるようにコンパイルされないため、コンパイラは からへの変換を見つける方法がありません。Store
A
String
A
文字列を他の型に変換するようなオブジェクトをどのように作成しますか? ライブラリのユーザーがタイプを 2 回 (つまり、タイプと変換関数の両方を指定して) 入力することは望ましくありません。