Почему я могу пометить методы как неявные, но не как конструктор?
Общий шаблон 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 ответ
Решение
Если я правильно понимаю ваш вопрос (см. Мой комментарий выше), что вы думаете о том, чтобы это:
implicit class Foo(val i : Int) {
...
}
Будет составлять:
implicit def int2Foo(x : Int) = new Foo(x)
class Foo(val i : Int) {
...
}
Если вы имеете в виду не только унылость, то, возможно, вам нужно подумать над этой проблемой, чтобы избежать чрезмерной сложности семантики объявления конструктора.
Но что касается мелкомасштабного добавления синтаксиса, это было предложено и получило нюансы, но относительно положительные комментарии от Мартина Одерского, но у меня пока нет новостей по реализации.