对象将字符串转换为“A”

时间:2009-08-28 11:10:44

标签: scala type-conversion implicit type-erasure

我想写一个类似这样的课程:

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将被删除,因此编译器无法找到从StringA的转换{{1}}
  4. 如何创建将字符串转换为其他类型的对象?我不希望库的用户输入类型rwice(即通过指定类型和转换函数)。

1 个答案:

答案 0 :(得分:1)

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

我冒险第二个apply无法编译,因为String => A范围内没有隐式object Store