Я прохожу через «Программирование в Scala» и собираюсь вместе с примерами. Кажется, я застрял в главе 10, где мы делаем подклассы из абстрактного класса.Подкласс, не расширяющий абстрактный класс
Я не могу понять, почему мой код не будет компилироваться; похоже, что ArrayElement автоматически должен быть типом элемента?
Код:
abstract class Element {
def contents: Array[String]
def height: Int = contents.length
def width: Int = if (height == 0) 0 else contents(0).length
def above(that: Element): Element =
new ArrayElement(this.contents ++ that.contents)
def beside(that: Element): Element =
new ArrayElement(
for (
(line1, line2) <- this.contents zip that.contents
) yield line1 + line2
)
override def toString: String = contents mkString "\n"
}
class ArrayElement(
val contents: Array[String]
) extends Element
Ошибка:
<console>:16: error: type mismatch;
found : ArrayElement
required: Element
new ArrayElement(this.contents ++ that.contents)
^
<console>:18: error: type mismatch;
found : ArrayElement
required: Element
new ArrayElement(
^
Спасибо!
Эй, Робин, у меня были ошибки, когда я использовал: load. Я пробовал: вставить, и он все еще жаловался! На самом деле, попробовал еще раз, и все получилось. Благодаря! –
ОК, попробуйте вместо этого скалак. Возможно, REPL не справляется с рекурсивными зависимостями. –
Я нашел ответ от 2010 года, говоря, что он не может использовать рекурсивные зависимости: http://stackoverflow.com/questions/3663865/what-are-the-limitations-and-walkarounds-of-scala-interpreter Позвольте мне знать, если scalac работает, и я исправлю свой ответ. –