Подтвердить что ты не робот

Может ли Scala script ссылаться на другой нескомпилированный код Scala в том же каталоге?

Если у меня есть два отдельных нескомпилированных файла scala в том же каталоге, что и:

// hello.scala
object hello {
  def world() = println("hello world")
}

и

// do.scala
hello.world()

Я получаю сообщение об ошибке при запуске do.scala:

$ scala do.scala
error: not found: value hello

Вместо этого мне нужно сначала скомпилировать файл hello.scala и поместить его в путь к классам, чтобы заставить его работать:

$ scalac hello.scala
$ scala -cp hello do.scala
hello world

Есть ли способ получить один script для вызова другого нескомпилированного файла scala, используя правильное использование импорта, пакета, classpath, инструмента командной строки scala или что-то еще?

4b9b3361

Ответ 1

Возможно, не совсем то, что вы ищете, но из оболочки Scala REPL вы можете сделать

:load hello.scala
:load do.scala

для достижения того же результата:

$ scala
Welcome to Scala version 2.9.1 (Java HotSpot(TM) Server VM, Java 1.6.0_26).
Type in expressions to have them evaluated.
Type :help for more information.

scala> :load hello.scala
Loading hello.scala...
defined module hello

scala> :load do.scala
Loading do.scala...
hello world

scala> 

Если вы хотите что-то неинтерактивное для сценариев

$ cat <<EOF | scala
:load hello.scala
:load do.scala
EOF

работает тоже.

Используйте :help для более интересных вещей, которые может сделать оболочка REPL.

Ответ 2

Взгляд на компиляцию/внедрение компилятора на лету. Twitter util-eval - один из таких примеров.