我想写一个类似这样的课程:
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)
}
这样做,我遇到了一些问题:
apply
对象的第二个Store
方法只是不编译,因为A
将被删除,因此编译器无法找到从String
到A
的转换{{1}} 如何创建将字符串转换为其他类型的对象?我不希望库的用户输入类型rwice(即通过指定类型和转换函数)。
答案 0 :(得分:1)
我不明白你用第二个apply
尝试了什么。对我来说,看起来第一个apply
应该有隐含关键字,你就完成了它。您可以显式传递参数,也可以在隐式存在时将其保留。此外,您不需要明确传递c
,因为您已经在第一个apply
的范围内隐含了它。
我冒险第二个apply
无法编译,因为String => A
范围内没有隐式object Store
。