据我了解,Scala的最终课程是任何课程。但是,我认为Scala是基于Java构建的,所以最终的类不是Object吗?我一直在检查文档,但我可能是错的,但是它没有显示Object是Any的父类,也看不到任何导入到Scala的java.lang包,应该是它的主干吗?
您正在将Scala编程语言与其实现之一混淆。
A 编程语言是一组数学规则和限制。不多。它不是“用任何东西写的”(可能用英语写的),也不是“以任何东西为基础的”(也许写规范的纸除外)。
An [[Implementation”是一种软件,可以读取以编程语言编写的程序,然后以使得编程语言规范应说的确切内容发生的方式<< executes >>来执行该程序, do发生(在这种情况下,我们将实现称为Interpreter),或者它读取程序并以另一种语言输出另一个程序,以这样的方式执行that输出程序并为< [它的]语言使事情完全按照输入语言的规范所说的进行。无论哪种方式,编写实现的人都要确保自己的实现执行了规范规定的工作。因此,即使我正在编写“用Java构建”并用Java编写的Scala实现,我仍然需要确保Any
是顶级类型,因为这就是Scala语言规范所说的。] >目前有三个主动维护的Scala实现,一个废弃的实现。
Scala的废弃实现是Scala.NET,它是针对公共语言基础结构的编译器。由于缺乏兴趣和资金,它被放弃了。 (基本上,所有可能会使用Scala.NET的用户都已经在使用F#。)
Scala当前维护的实现是:
Scala-native:针对unixoid操作系统和Windows的已编译实现。
Scala-js:针对ECMAScript和Web平台的已编译实现。
does
java.lang.Object
做了一些事情。但是,java.lang.Object
是scala.Any
的超类。实际上,它不可能
,因为scala.Any
是引用类型和值类型的根超类,而java.lang.Object
是only所有引用类型的根超类。因此,java.lang.Object
实际上等效于scala.AnyRef
,而不等于scala.Any
。但是,java.lang.Object
也不是scala.AnyRef
的超类,而是两者都是same类。也java.lang._
是自动导入,就像scala._
一样。但是,此[[不是适用于Scala编程语言,它only适用于Scala编程语言的Java实现,不幸的是,其名称也为Scala。So,only
对于这三个实现之一,陈述java.lang.Object
是根类,但它不是scala.Any
的超类,这是真实的说法。 相同类别与scala.AnyRef
。但是同样,这仅适用于Scala的Java实现。例如,在Scala.NET中,根超类将用System.Object
而不是java.lang.Object
标识,并且等效于scala.Any
而不是scala.AnyRef
,因为CLI具有像Scala这样的统一类型系统,其中引用类型和值类型在同一类型系统中统一。而且我还没有检查Scala.js,但我认为它可以将Object
标识为scala.AnyRef
。但是请注意,此无
是因为实现是“构建”的。尝试合并Scala和Java / CLI / ECMAScript类层次结构的原因是为了[[interoperability,这是为了轻松从Java / CLI / ECMAScript上的其他每种语言调用Scala代码平台,反之亦然,调用Scala用其他语言编写的代码。如果您不关心这一点,那么就没有必要跳过这些箍。