Scala 为什么我们可以使用2.12中的2.11编译的特征?

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.

在理解过程中,我编写了自己的示例,其中使用了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.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