[英]Scala Internal Class Typing - Type Mismatch Error
運行以下代碼時,我遇到了一個非常奇怪的輸入錯誤。
這段代碼的目標是有一個 class 可以將這個 class 的其他實例與其自身組合,生成更新的實例。 (也許我應該更喜歡不變性和返回副本,但這是另一個討論)。
IntelliJ 在我嘗試運行代碼之前不會抱怨,然后它會崩潰
發現類型不匹配:需要 mic.MyInternalClass:MyClass.this.MyInternalClass this.myVar =
this.myVar.combine(mic.myVar)"
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 中被認為是一個單獨的類型,所以你不能混合this
和mic
的MyInternalClass
。 如果這不是您想要的,那么最好將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.