繁体   English   中英

Scala 内部 Class 键入 - 类型不匹配错误

[英]Scala Internal Class Typing - Type Mismatch Error

运行以下代码时,我遇到了一个非常奇怪的输入错误。

这段代码的目标是有一个 class 可以将这个 class 的其他实例与其自身组合,生成更新的实例。 (也许我应该更喜欢不变性和返回副本,但这是另一个讨论)。

IntelliJ 在我尝试运行代码之前不会抱怨,然后它会崩溃

发现类型不匹配:需要 mic.MyInternalClass:MyClass.this.MyInternalClass this.myVar =
this.myVar.combine(mic.myVar)"

IntelliJ 错误消息

class MyClass(s: String) {

  var myVar: MyInternalClass = new MyInternalClass(s)

  def combine(mic: MyClass): MyClass = {

    this.myVar = this.myVar.combine(mic.myVar)
    this
  }

  class MyInternalClass(s: String) {

    var myInternalVar: String = s

    def combine(mic: MyInternalClass): MyInternalClass = {
      this.myInternalVar += mic.myInternalVar
      this
    }
  }
}


object App {


  def main(args : Array[String]) {

    var mc1: MyClass = new MyClass("dog")
    var mc2: MyClass = new MyClass("cat")

    mc1.combine(mc2)

    println(mc1.myVar.myInternalVar)
    println(mc2.myVar.myInternalVar)
  }

}

每个实例的MyInternalClass在 Scala 中被认为是一个单独的类型,所以你不能混合thismicMyInternalClass 如果这不是您想要的,那么最好将MyInternalClass声明移动到伴随的 object 中,而不是在任何地方使用MyClass#MyInternalClass MyInternalClass:

// otherwise you'll need to write MyClass.MyInternalClass explicitly even inside MyClass
import MyClass.MyInternalClass

class MyClass(s: String) {

  var myVar: MyInternalClass = new MyInternalClass(s)

  def combine(mic: MyClass): MyClass = {

    this.myVar = this.myVar.combine(mic.myVar)
    this
  }
}

object MyClass {
  class MyInternalClass(s: String) {

    var myInternalVar: String = s

    def combine(mic: MyInternalClass): MyInternalClass = {
      this.myInternalVar += mic.myInternalVar
      this
    }
  }
}

我刚刚找到这个链接: 参考 Scala 中的内部 class 的类型

看起来内部 class 方法需要像这样的特殊类型:

def combine(mic: MyClass#MyInternalClass): MyInternalClass = {

仍在学习为什么会这样的细微差别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM