Мой вопрос в том, как этот объект создан или создан его экземпляр?
[…]
Тогда как объекты существуют или создаются?
Вы не знаете, не должны знать и не можете знать.
Спецификация языка Scala говорит, что они существуют. Спецификация языка Scala не говорит, как они создаются. Каждый разработчик может реализовать их так, как ему заблагорассудится. . Scala -native не зависит от какой-либо платформы, поэтому он может делать все, что захочет. Scala -JVM должен соответствовать ограничениям JVM, где каждый объект должен быть экземпляром класса. В Scala -JVM каждый одноэлементный объект Foo
является экземпляром класса JVM с именем Foo$
.
Плюс объект будет иметь тот же тип данных класса, как я полагаю?
Тип одиночного объекта Foo
- это одиночный тип Foo.type
. Это не класс.
Я читал из некоторых источников о том, что объекты являются экземплярами класса, если используются в качестве сопутствующих объектов, в то время как другие говорят, что они не являются экземплярами класса.
Вместо того, чтобы читать «некоторые источники», гораздо лучше просто прочитать источник : Scala Спецификацию языка , в частности раздел 5.3.2 Классы case :
Определение класса case ? [tps] (ps 1 )… (ps ? ) с параметрами типа tps и параметрами значения ps подразумевает определение сопутствующего объекта, который служит объектом экстрактора. Он имеет следующую форму:
object ? {
def apply[tps](ps1)…(ps?): ?[tps] = new ?[Ts](xs1)…(xs?)
def unapply[tps](?: ?[tps]) =
if (x eq null) scala.None
else scala.Some(?.xs11,…,?.xs1?)
}