Завод 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?

Продолжайте кодировать молодой.

Другие вопросы по тегам