Почему я могу пометить методы как неявные, но не как конструктор? - PullRequest
3 голосов
/ 05 августа 2011

Общий шаблон Enrich-My-Library выглядит примерно так:

class Foo(value: Int)

implicit def int2Foo(i: Int) = new Foo(i)

Почему невозможно просто добавить implicit к самому конструктору, как этот

class Foo implicit (value: Int)

учитывая, что конструктор не намного больше, чем метод с некоторыми дополнительными ограничениями?

Удивительно, но работает следующее:

class Foo(value: Int) {
  implicit def this(a: String) = this(a.toInt)
}

1 Ответ

5 голосов
/ 05 августа 2011

Если я правильно понимаю ваш вопрос (см. Мой комментарий выше), то, что вы думаете о таких суммах, будет:

implicit class Foo(val i : Int) {
 ...
}

Будет составлять:

implicit def int2Foo(x : Int) = new Foo(x)
class Foo(val i : Int) {
 ...
}

Если это больше, чемне обращая внимания на то, что вы имеете в виду, , вероятно, есть еще одна мысль, которую нужно уделить проблеме , чтобы избежать чрезмерной сложности семантики объявления конструктора.

Но что касается мелкомасштабныхидет добавление синтаксиса, это было предложено , и получил тонкие, но относительно положительные комментарии от Мартина Одерского, но у меня пока нет новостей по реализации.

...