2

次のようなクラスを書きたいと思います。

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)
}

そうすることで、いくつかの問題があります。

  1. 文字列で暗黙的に使用すると、トラブルは尽きません
  2. とにかく、それらが私のモジュールで定義されている場合、システムは暗黙的なものを見つけません。クラスを作成するモジュールで定義する必要があります
  3. オブジェクトの 2 番目のapplyメソッドは、消去されるようにコンパイルされないため、コンパイラは からへの変換を見つける方法がありません。StoreAStringA

文字列を他の型に変換するようなオブジェクトをどのように作成しますか? ライブラリのユーザーがタイプを 2 回 (つまり、タイプと変換関数の両方を指定して) 入力することは望ましくありません。

4

1 に答える 1

1

2番目の で何をしようとしているのかわかりませんapply。私には、最初applyのキーワードには暗黙のキーワードが必要なように見えます。パラメータを明示的に渡すことも、暗黙的なパラメータが存在する場合は省略することもできます。また、明示的に渡す必要はありません。c最初のスコープに既に暗黙的に含まれているためですapply

のスコープで利用可能なapply暗黙的なものがないため、2番目はコンパイルされません。String => Aobject Store

于 2009-08-28T14:21:26.570 に答える