Ответ 1
scala> class Foo { var bar: Int = _ }
defined class Foo
scala> var foo = new Foo() { bar = 5 }
foo: Foo = [email protected]
scala> var realFoo = new Foo()
realFoo: Foo = [email protected]
Вы можете видеть, что синтаксис работает (в данном случае), но также и что foo не имеет типа Foo. Это фактически новый подтип Foo, который подклассифицирует его тем, что находится между фигурными скобками. В этом случае только конструктор с дополнительным присваиванием.
В общем случае точный синтаксис С# не будет работать:
scala> class Foo { var bar: Int = _; var baz: String = _ }
defined class Foo
scala> var foo: Foo = new Foo { bar = 5, baz = "bam" }
<console>:1: error: ';' expected but ',' found.
var foo: Foo = new Foo { bar = 5, baz = "bam" }
Вместо этого вам нужно будет ввести:
scala> var foo: Foo = new Foo { bar = 5; baz = "bam" }
foo: Foo = [email protected]
Сначала будет запускаться конструктор Foo, затем будет запускаться конструктор анонимного типа.
Я думаю, что это то, о чем комментируют Ким и Алексей.
Я не использую С#, но, похоже, в С# этот бит синтаксиса можно использовать только для инициализации полей, а в Scala было решено использовать этот синтаксис для расширения класса, как в Java.