簡體   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