2

次の REPL セッションでは:

scala> new Object { def foo = "bar" }
res0: Object{def foo: String} = $anon$1@131a24c

scala> res0.foo
<console>:9: warning: reflective access of structural type member method foo should be enabled by making the implicit value language.reflectiveCalls visible.
          res0.foo
               ^
res1: String = bar

scala> trait Foo { def foo: String }
defined trait Foo

scala> new Foo { def foo = "bar"; def foo(bar: Int, baz: Int) = "bar" }
res2: Foo{def foo(bar: Int,baz: Int): String} = $anon$1@18a4aef

scala> res2.foo(1, 2)
res4: String = bar

への呼び出しは、 に新しい構造メンバーを追加したres0.fooため、リフレクション呼び出しです。ただし、 への呼び出しは、 の欠如について不平を言うことはありません。明らかにそのサイレントを引き起こしています。反射的な呼び出しであってはなりませんか?コンパイラが静かな理由を誰か説明できますか?res0Objectres2.foo(1, 2)import language.reflectiveCallsdef foo: Stringres2.foo(1, 2)

4

0 に答える 0