Вот кое-что о том, что вы делаете:
new Foo {} // Anonymous subclass of Object with trait Foo
new Foo () // Foo
new Foo // Foo
Когда вы делаете что-то вроде bar(new Foo {})
, компилятор еще не знает, что вы делаете - он пытается найти bar
метод, который будет принимать new Foo {}
, но пока точно не знает, что это за тип new Foo {}
, потому что он зависит от того, что такое bar
.
Если вы объявите val f = new Foo{}
, f
'Тип s становится фиксированным, что помогает компилятору выяснить, что он должен делать с bar
.