Завод Scala игнорируется компилятором?
Я потратил все это время, собирая метод фабрики в моем объекте-компаньоне, вот так:
class Stuff(val a: Int, val b: Long) { this() = this(0,0L) }
object Stuff {
def apply(a:Int, b:Int) = new Stuff(a, b.toLong)
}
Но когда я подумал, что убиваю его, я пошел на компиляцию, и это не сработало:
val widget = new Stuff(1,2)
Что здесь происходит!? Я только что сделал это!? Помогите!!!
1 ответ
Решение
Ну, молодой Scala кодер, не бойтесь, потому что ответ прост. Вы не используете фабрику правильно. Видите, этот код на самом деле будет делать то, что вы хотите:
val widget = Stuff(1,2)
//makes Stuff(1, 2L)
Проблема здесь в вашем синтаксисе. Когда вы звоните new
это создает новый класс Stuff
, Но apply
действительно синтаксический сахар для widget.apply(1,2)
и в этом нет ничего другого.
Вы также можете узнать больше о apply
Сахар здесь: Как работает волшебство метода apply() в Scala?
Продолжайте кодировать молодой.