scala> class Foo { var bar: Int = _ }
defined class Foo
scala> var foo = new Foo() { bar = 5 }
foo: Foo = $anon$1@1ed00d1
scala> var realFoo = new Foo()
realFoo: Foo = Foo@1bedb0
Вы можете видеть, что синтаксис работает (в данном случае), но также и что foo не имеет типа Foo.На самом деле это новый подтип Foo, который подклассирует его с тем, что находится между скобками.В этом случае просто конструктор с дополнительным присваиванием.
В общем случае точный синтаксис C # не будет работать:
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 = $anon$1@1be20c
Сначала будет запускаться конструктор Foo, затем - конструктор анонимного типа.
Я думаю, что это то, к чему относятся комментарии Кима и Алексея.
Я не использую C #, но, похоже, в C # этот бит синтаксиса может использоваться только для инициализации полей, тогда как вВ Scala было решено использовать этот синтаксис для расширения класса, как в Java.