scala> val a1 = scala.concurrent.Promise[Int]
a1: scala.concurrent.Promise[Int] = [email protected]
Я не могу понять, как создается экземпляр DefaultPromise выше. Вполне понятно, что в приведенном ниже примере, ()
делает вызов apply()
и DefaultPromise создаетсяScala - Типы и активация
scala> val a2 = scala.concurrent.Promise[Int]()
a2: scala.concurrent.Promise[Int] = [email protected]
Если опустить скобки, объект-компаньон (если таковой существует) будет присвоен переменной. Если сопутствующий объект не существует, произойдет ошибка компиляции. Он не создает экземпляр, если мы опускаем скобки. Например, если существует класс 'Person' и объект-компаньон' Person', 'val a = Person' приведет к' a: Person.type = Person $ @ 51c693d'. Это отличается от 'val b = new Person', что приведет к' b: Person = Person @ 1efe439d' –
Вы передаете параметр типа ('Int') методу' apply'. Вот как компилятор знает, что вы вызываете 'apply'; объект не имеет параметров типа. –
@ Jasper-M Спасибо. Не могли бы вы объяснить немного подробнее - может быть с примером или ссылкой на него? –