Нет ли проблемы циклической зависимости с примером Element в главе 10 «Программирование в Scala»? - PullRequest
1 голос
/ 28 мая 2010

В главе 10 на странице 198 «Программирование в Scala» определение элемента определяет функцию / метод «выше», который возвращает новый ArrayElement. Но ArrayElement расширяет Element.

Пытаясь напечатать в примерах, я фактически получаю то, что ожидал ... жалобу на циклическую зависимость этих определений.

Чего мне не хватает?

Ответы [ 3 ]

4 голосов
/ 29 мая 2010

Круговые определения не являются проблемой в этом случае, так как тип возвращаемого значения не является круговым, и реализация может быть решена за второй проход после того, как типы разрешены.

Например - и обратите внимание, что я оборачиваю все в объект, чтобы REPL рассмотрел все сразу:

object Example {
  abstract class E {
    def a: Int
    def e: E = new AE(2)
  }
  class AE(val a: Int) extends E { }
}

и это работает как ожидалось:

scala> val ae = new Example.AE(0)
ae: Example.AE = Example$AE@57240e

scala> ae.a
res1: Int = 0

scala> ae.e.a
res2: Int = 2

Я предполагаю, что пока вы набираете его, вы пытаетесь заставить REPL принять только часть кругового определения, или вы пропускаете что-то, что позволяет округлости разрешаться в типах (например, если вы введете возвращаемое значение как AbstractElement, а не Element, это может сбить с толку!).

В любом случае, код «как есть» мне подходит.

1 голос
/ 19 мая 2012

Вы можете обернуть все в исходном файле следующим образом:

layout {      
... code goes here...   
}

Тогда в REPL вы можете: загрузить [ваш файл] и сделать

layout.Element.elem("bla bla bla")
1 голос
/ 28 мая 2010

Я полагаю, что ожидается, что определение ArrayElement со страницы 196 уже действует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...