РЕДАКТИРОВАТЬ: после прочтения вашего вопроса, я должен признать, что я действительно не ответил на него;).Но, возможно, это все еще помогает.
Мне известны два ограничения интерпретатора (или REPL), когда речь идет о загрузке файлов scala (для их интерактивного тестирования).
- Вы не можете загружать файлы scala с определениями пакетов в них.REPL жалуется и не загружает весь класс - это файл scala для загрузки.Он прочитал, что это связано с тем, что файлы, загруженные в REPL, рассматриваются как объект.,,который, конечно, не может содержать никаких определений пакетов.
- REPL странно (или немного непредсказуемо), когда в classpath есть файлы классов загруженных файлов scala.Прочтите этот вопрос самостоятельно и особенно мои 2 последних комментария ко второму ответу.
Кроме того, существует проблема с циклическими зависимостями, которую я не знаю для обходного пути: Предположим, что есть класс A
, который использует класс B
, который снова нуждается в A
, чтобы выполнить свою работу.Конечно, вы не можете определить A
, поскольку нет определения B
и наоборот.Предоставление фиктивного значения для одного из них также не работает:
scala> class A {
| def alterString(s:String) = s
| def printStuff(s:String) = println(alterString(s))
| }
defined class A
scala> class B {
| val prefix = "this is a test: "
| def doJob() = new A() printStuff "1 2 3"
| }
defined class B
scala> class A {
| def alterString(s:String) = new B().prefix + s
| def printStuff(s:String) = println(alterString(s))
| }
defined class A
scala> new B().doJob()
1 2 3
scala>
Хотя я уже предоставил более новое определение A
, класс B
все еще использовал то, которое присутствовало, когда я его определил.