21

scala での空パラメーター メソッドとパラメーターなしメソッドの使用法の違いについては知っていますが、私の質問は生成されたクラス ファイルに関するものです。javap でこれら 2 つのクラスを見ると、まったく同じように見えます。

class Foo {
  def bar() = 123;
}


class Foo {
  def bar = 123;
}

しかし、scalap で見ると、パラメーター リストを正確に反映しています。クラスファイルのどこにscalacがあり、この区別が知られていますか?

4

1 に答える 1

20

ScalaSig.classファイルには、 Scalaに必要なすべての追加情報を含むというクラスファイル属性があります。人間が実際に読むことはできませんが、そこにあります。

$ javap -verbose Foo.class
const #195 = Asciz      ScalaSig;
const #196 = Asciz      Lscala/reflect/ScalaSignature;;
const #197 = Asciz      bytes;
const #198 = Asciz      ^F^A!3A!^A^B^A^S\t\tb)^[7f^Y^Vtw\r^^5DQ^V^\7.^Z:^K^E\r!^
Q^A^B4jY^VT!!^B^D^B^UM^\^W\r\1tifdWMC^A^H^....

Scala署名はどのように保存されますか?も参照してください。とscala.reflect.ScalaSignature、これはあまり面白くありません:-)

于 2012-04-12T19:27:23.717 に答える