Scala 为什么我们可以使用2.12中的2.11编译的特征?
在理解过程中,我编写了自己的示例,其中使用了scala库版本Scala 为什么我们可以使用2.12中的2.11编译的特征?,scala,traits,Scala,Traits,在理解过程中,我编写了自己的示例,其中使用了scala库版本2.11.4的一个特性: trait Trace { def id(): Int def concrete(i : Int) = println(i) } 从程序中使用版本2.12.0-M5 object App { def main(args: Array[String]) = { println("st") val t = new TraceImpl println(t.id()) t.
2.11.4
的一个特性:
trait Trace {
def id(): Int
def concrete(i : Int) = println(i)
}
从程序中使用版本2.12.0-M5
object App {
def main(args: Array[String]) = {
println("st")
val t = new TraceImpl
println(t.id())
t.concrete(10)
}
class TraceImpl extends Trace{
override def id(): Int = 1
}
}
我预计在运行时会抛出一些异常,但该程序运行良好并打印:
st
1
10
为什么??traits的运行时实现应该从版本
2.12.x
?开始更改,确切地说,您是如何构建的?@AlexeyRomanov我从Intellij构建并运行它的。文件在不同的项目(或至少是不同的IDEA模块)中吗?你只是在使用不同的scala library.jar
或不同的编译器版本吗?如果它们只是在不同的模块中,IDEA可能足够聪明,可以重新编译Trait
。确切地说,你是如何构建它的?@AlexeyRomanov我从Intellij构建并运行它的。这些文件在不同的项目中吗(或者至少是不同的IDEA模块)?您只是在使用不同的scala library.jar
或不同的编译器版本吗?如果它们只是在不同的模块中,IDEA可能足够聪明,可以重新编译Trait
。