Объект, преобразующий строку в «А» - PullRequest
2 голосов
/ 28 августа 2009

Я хотел бы написать класс, похожий на этот:

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

Как бы вы создали такой объектчто преобразовать строку в какой-то другой тип?Я бы не хотел, чтобы пользователь библиотеки вводил тип rwice (т. Е. Указав тип и функцию преобразования).

1 Ответ

1 голос
/ 28 августа 2009

Я не понимаю, что вы пытаетесь со вторым apply. Для меня это выглядит так, как будто первое apply должно иметь неявное ключевое слово, и с этим можно покончить. Вы можете либо передать параметр явно, либо пропустить его, если присутствует неявный. Кроме того, вам не нужно явно передавать c, поскольку вы уже неявно передали бы его в область действия первого apply.

Я бы рискнул, вторая apply не скомпилируется, потому что в области действия object Store.

нет неявного String => A.
...