Объект O
расширяет черту T1
, который имеет тип C
.Несоответствие типов: тип, на который ссылается объект, не тот, который указан в признаке, который распространяется на объект?
В T1
Я хочу управлять статической структурой данных stack
, определенной в объекте O
. но компилятор продолжает жаловаться
типа несоответствия, которые нашли T1.this.C, требуют OC
код, как:
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]
}
Я запутался ... Безразлично 't O
знать C
и должен быть того же типа, что и у T1
? Что мне здесь не хватает? и как я могу делать то, что хочу?
Update
Основываясь на одно предложение поставить 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]
}
Пожалуйста, добавьте строку и текст сообщения об ошибках, поэтому мы точно знаем _where_, что было обнаружено несоответствие. –
@ DanielC.Sobral Я обновил сообщение. благодаря! – monica