Может ли 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 или что-то еще?
Ответы
Ответ 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 - один из таких примеров.