Scala脚本可以在同一目录中引用其他未编译的scala代码吗?

use*_*156 13 scala classpath

如果我在同一目录中有两个单独的未编译的scala文件:

// hello.scala
object hello {
  def world() = println("hello world")
}
Run Code Online (Sandbox Code Playgroud)

和:

// do.scala
hello.world()
Run Code Online (Sandbox Code Playgroud)

运行do.scala时出错:

$ scala do.scala
error: not found: value hello
Run Code Online (Sandbox Code Playgroud)

相反,我必须首先编译hello.scala文件并将其放在类路径上以使其工作:

$ scalac hello.scala
$ scala -cp hello do.scala
hello world
Run Code Online (Sandbox Code Playgroud)

有没有办法让一个脚本使用import,package,classpath,scala命令行工具或其他东西正确使用来调用另一个未编译的scala文件?

tim*_*day 8

也许不完全是你想要的,但是你可以从Scala REPL shell中做到

:load hello.scala
:load do.scala
Run Code Online (Sandbox Code Playgroud)

实现相同的结果:

$ 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> 
Run Code Online (Sandbox Code Playgroud)

如果你想要一些非交互式的脚本

$ cat <<EOF | scala
:load hello.scala
:load do.scala
EOF
Run Code Online (Sandbox Code Playgroud)

也有效.

使用:help更有趣的事情REPL壳可以做.


pr1*_*001 2

研究动态编译/嵌入编译器。Twitter 的util-eval就是这样的一个例子。