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. 对象的第二种apply方法Store无法编译,因为A将被擦除,因此编译器无法找到从String到的转换A

您将如何创建这样一个将字符串转换为其他类型的对象?我不希望库的用户重新输入类型(即通过指定类型和转换函数)。

4

1 回答 1

1

我不明白你在尝试第二个什么apply。对我来说,看起来第一个apply应该有隐式关键字,你就可以完成它了。您可以显式传递参数,也可以在存在隐式参数时将其忽略。此外,您不需要c显式传递,因为您已经将它隐含在 first 的范围内apply

我敢冒险第二个apply不会编译,String => A因为object Store.

于 2009-08-28T14:21:26.570 回答