Scala如何知道“和”之间的区别;“def foo”;及;def foo()“;?
我知道scala中空参数和无参数方法之间的用法差异,我的问题与生成的类文件有关。当我在javap中查看这两个类时,它们看起来完全相同:Scala如何知道“和”之间的区别;“def foo”;及;def foo()“;?,scala,Scala,我知道scala中空参数和无参数方法之间的用法差异,我的问题与生成的类文件有关。当我在javap中查看这两个类时,它们看起来完全相同: class Foo { def bar() = 123; } class Foo { def bar = 123; } 但当我在scalap中查看它们时,它们准确地反映了参数列表。scalac在类文件中的什么地方知道了这种区别?在.class文件中,有一个名为ScalaSig的类文件属性,它包含Scala所需的所有额外信息。它不是人类真正可以阅读的
class Foo {
def bar() = 123;
}
class Foo {
def bar = 123;
}
但当我在scalap中查看它们时,它们准确地反映了参数列表。scalac在类文件中的什么地方知道了这种区别?在.class文件中,有一个名为
ScalaSig
的类文件属性,它包含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^....
另请参见和,这不是很有趣:-)谢谢!出于某种原因,-verbose从来没有从javap手册页跳到我面前,正如你所说的,它不是世界上最容易让人阅读的东西:)