Функциональное различие между двумя конструкциями заключается в том, что object Bar
создается только тогда, когда это необходимо, а val Bar
создается, как только используется object Foo
. На практике это означает, что вы должны использовать объект (или lazy val
), если правая часть дорогая и не всегда будет нужна. В противном случае val
, вероятно, проще.
Также обратите внимание, что если класс Baz
является окончательным, вы не сможете использовать стиль object
, поскольку вы не можете расширить Baz
(хотя вы все равно можете использовать lazy val
, если хотите отложить создание, пока оно не понадобится).