【发布时间】:2013-02-23 20:23:41
【问题描述】:
对象O 扩展了一个特征T1,它定义了C 类型。
在T1 中,我想操作对象O 中定义的静态数据结构stack。
但是编译器一直在抱怨
找到 T1.this.C 的类型不匹配,需要 O.C
代码如下:
trait T1 {
case class C(i: Int, s: String)
def dumbAdd(i: Int, s: String) = {
O.stack.push(C(i, s)) // type mismatch error goes here.
}
}
object O extends T1 {
var stack: Stack[C] = new Stack[C]
}
我很困惑...O 不知道C 并且应该与T1 中的类型相同?
我在这里想念什么?
我该怎么做?
更新
基于将C 放入对象T1 的一项建议,但在我的实际示例中,对象T1 无法访问特征T1 中定义的类型。减少的问题如下:
trait T1 {
abstract sealed class S
case class SC extends S
def dumbAdd(i: Int, s: String) = {
O.stack.push(C(i, s))
}
}
object T1 {
case class C(i: Int, s: String)
def tryASC {
val scc = SC() // Here the compiler says not found value SC
}
}
object O extends T1 {
var stack: Stack[C] = new Stack[C]
}
【问题讨论】:
-
请添加错误消息的行和插入符号,以便我们确切地知道在哪里发现了不匹配。
-
@DanielC.Sobral 我更新了帖子。谢谢!
标签: scala