加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala如何知道“def foo”和“def foo()”之间的差异?

发布时间:2020-12-16 09:42:09 所属栏目:安全 来源:网络整理
导读:我知道scala中空参数和无参数方法之间的使用差异,我的问题与生成的类文件有关。当我查看javap中的这两个类时,它们看起来完全相同: class Foo { def bar() = 123;}class Foo { def bar = 123;} 但是当我看到它们时,他们准确地反映了参数列表。在类文件中
我知道scala中空参数和无参数方法之间的使用差异,我的问题与生成的类文件有关。当我查看javap中的这两个类时,它们看起来完全相同:

class Foo {
  def bar() = 123;
}


class Foo {
  def bar = 123;
}

但是当我看到它们时,他们准确地反映了参数列表。在类文件中哪里是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^Sttb)^[7f^Y^Vtwr^^5DQ^V^7.^Z:^K^Er!^
Q^A^B4jY^VT!!^B^D^B^UM^^Wr1tifdWMC^A^H^....

另见How is the Scala signature stored?和scala.reflect.ScalaSignature,这不是很有趣:-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读