Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala内部类类型-类型不匹配错误_Scala - Fatal编程技术网

Scala内部类类型-类型不匹配错误

Scala内部类类型-类型不匹配错误,scala,Scala,运行下面的代码时,我遇到了一个非常奇怪的键入错误 此代码的目标是创建一个类,该类可以将该类的其他实例与自身结合起来,生成更新的实例。也许我更喜欢不变性并返回副本,但这是另一个讨论 IntelliJ不会抱怨,直到我尝试运行代码,然后它崩溃 发现类型不匹配:mic.MyInternalClass 必需:MyClass.this.MyInternalClass this.myVar= this.myVar.combinemic.myVar 我刚找到这个链接: 看起来内部类方法需要一个特殊类型,如下所示

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

此代码的目标是创建一个类,该类可以将该类的其他实例与自身结合起来,生成更新的实例。也许我更喜欢不变性并返回副本,但这是另一个讨论

IntelliJ不会抱怨,直到我尝试运行代码,然后它崩溃

发现类型不匹配:mic.MyInternalClass 必需:MyClass.this.MyInternalClass this.myVar= this.myVar.combinemic.myVar

我刚找到这个链接:

看起来内部类方法需要一个特殊类型,如下所示:

def combine(mic: MyClass#MyInternalClass): MyInternalClass = {
仍在学习为什么会出现这种情况的细微差别。

每个实例的MyInternalClass在Scala中都被视为一个单独的类型,因此您不能混合使用this和mic的MyInternalClass。如果这不是您想要的,与其到处使用MyClassMyInternalClass,不如将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
    }
  }
}
// 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
    }
  }
}