[英]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.