代码之家  ›  专栏  ›  技术社区  ›  PierreBdR

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

  •  2
  • PierreBdR  · 技术社区  · 16 年前

    我想写一个这样的类:

    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. 对字符串使用implicit不会带来任何麻烦
    2. 无论如何,系统找不到隐式如果它们是在我的模块中定义的,则需要在创建类的模块中定义它们
    3. 第二 apply 方法 Store 对象不能编译为 A 将被删除,因此编译器无法从 String

    如何创建将字符串转换为其他类型的对象?我不希望库的用户输入rwice类型(即通过同时指定类型和转换函数)。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Daniel C. Sobral    16 年前

    我不明白你想用第二个 apply . 对我来说,这是第一次 应用 应该有隐式关键字,你就可以用它了。您可以显式传递参数,或者如果隐式存在则将其保留。而且,你不需要通过 c 显式地,因为您已经将它隐式地包含在第一个 应用 .

    我敢说第二个 应用 不编译,因为没有隐式 String => A 适用范围 object Store .