Any类的源码在哪儿?

只找到了 AnyVal.scala

AnyRef 是在Predef里定义的:


val AnyRef      = new SpecializableCompanion {} 

Any则没有找到

并且在我的 2.9.1-1 里 AnyVal是:

sealed trait AnyVal

与 github 主干上看到的:
https://github.com/scala/scala/blob/master/src/library/scala/AnyVal.scala

abstract class AnyVal extends Any with NotNull {
    // disabled for now to make the standard build go through.
    // Once we have a new strap we can uncomment this 
    // and delete the AnyVal_getClass entry in Definitions.
    def getClass(): Class[_ <: AnyVal] = ???
}

定义方式不同。这让我十分奇怪,已经在scala-user邮件组发了邮件询问。

//2012.4.23 补充
https://groups.google.com/forum/#!searchin/scala-user/Any$20Class$20source$20code/scala-user/fQ0oyJQQL0Y/bJdu8K7UY9wJ

1) Any类可能是由编译器生成的。

2) 2.9里的AnyVal与2.10的声明不同,是因为2.10中增加了值类型(Value Classes)的概念
值类型需要继承自AnyVal,所以修改了AnyVal的定义。

Any类的源码在哪儿?》上有1条评论

  1. 杨春来

    一直很好奇,从java角度,Object是所有类的父类,那么就应该是Any的父类?而书上却说,AnyRef是Object的alias,那这样的话就说明Object 是Any的子类?
    想找来Any和AnyRef看看,没有源文件

    一脸懵逼。

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注