当外部类在Scala中声明为var时实例化内部类

时间:2016-08-20 19:56:13

标签: scala

当我将外部对象声明为var时,我无法实例化内部类。但当我将其作为val时,我没有收到任何错误。为什么会这样?

class Outer(name : String ) { ter  =>
  class Iner(name : Inner) {
    println("Printing outer class name : " + ter.name )
    println("Printing inner class name : " + name )
  }
}

object OverRiding extends App {
  var outr : Outer = new Outer("Priyaranjan Outer")
  var inner =  new outr.Iner("Priyaranjan Inner")
}

1 个答案:

答案 0 :(得分:3)

问题是在构造函数调用中,引用实例化类的表达式必须是稳定的标识符。这在http://www.scala-lang.org/files/archive/spec/2.11/05-classes-and-objects.html#constructor-invocations

的语言规范中是必需的

如果您查看stable identifier的定义,您会看到为什么outr必须是val

  
      
  • p.x其中p是路径,x是p的稳定成员。稳定成员是由对象定义或非易失性类型的值定义引入的包或成员。
  •