gpt4 book ai didi

scala - Scala如何知道 “def foo”和 “def foo()”之间的区别?

转载 作者:行者123 更新时间:2023-12-03 11:57:07 28 4
gpt4 key购买 nike

我知道scala中的空参数方法和无参数方法之间的用法差异,我的问题与生成的类文件有关。当我在javap中查看这两个类时,它们看起来完全相同:

class Foo {
def bar() = 123;
}


class Foo {
def bar = 123;
}

但是,当我从头皮上看它们时,它们准确地反射(reflect)了参数列表。 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^....

另请参见 How is the Scala signature stored?scala.reflect.ScalaSignature,它们不是很有趣:-)

关于scala - Scala如何知道 “def foo”和 “def foo()”之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10130106/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com