相关疑难解决方法(0)

Scala vs. Groovy vs. Clojure

有人可以解释Scala,Groovy和Clojure之间的主要区别.我知道这些编译中的每一个都在JVM上运行,但我想在它们之间进行简单的比较.

groovy scala language-comparisons clojure

676
推荐指数
5
解决办法
17万
查看次数

在运行时编译并执行Scala代码

是否可以在Scala或Java中在运行时将scala代码编译为字符串?

我的想法是使用Scala构建DSL,然后让Java程序员在Java中使用DSL.

我听说类scala.tools.nsc.Interpreter可以做类似的事情,但当我在scala文件中导入它时,我得到"对象工具不是包scala的成员".

所以有人能给我一个暗示吗?

dsl interpreter scala

21
推荐指数
2
解决办法
1万
查看次数

如何以编程方式调用Scala编译器?

我希望我的Scala代码将Scala类作为输入,编译并执行该类.如何以编程方式调用Scala编译器?我将使用最新的Scala版本,即2.10.

scala scala-compiler

14
推荐指数
1
解决办法
2750
查看次数

Scala - 如何在运行时从外部文件编译代码?

我想设计一个Scala程序,它接受Scala文件作为参数,可以自定义程序的执行.特别是,我想在运行时提供包含将由程序调用的方法的实现的文件.如何正确依赖外部文件并在运行时动态调用其方法?理想情况下,我还希望这些文件能够依赖于我的程序中的方法和类.

示例场景:我有一个包含该行的函数val p: Plant = Greenhouse.getPlant(),并且GreenhousegetPlant方法的类在将在运行时提供的其中一个文件中定义.在该文件中,该方法getPlant返回a Rose,where Rose <: PlantPlant在原始程序中定义.假设文件仅在运行时加入而不是在编译时加入,我如何实现(或近似)这种相互依赖性?

scala external-dependencies scala-compiler

12
推荐指数
2
解决办法
3902
查看次数

scala作为脚本语言

可能重复:
Scala中的"eval"

我知道scala是一种编译语言,但我也知道我可以动态地将类加载到jvm中,我可以在运行时调用scala编译器,最后但并非最不重要的是我也有一个很棒的repl,所以让scala作为一个脚本语言应该是可能的.

所以我需要运行一些任务:

简单解释:

val src = """ println("Hello World") """
interpret(src)
Run Code Online (Sandbox Code Playgroud)

调用外部函数:

object A{
    def foo = 
        println("Hello World")
}

val src = """ A.foo """
interpret(src)
Run Code Online (Sandbox Code Playgroud)

实现功能:

trait T{
    def foo:String
}

val src = """ class A extends T{ def foo = "Hello World" } """
interpret(src)
val t = loadClassAndCreatInstance.asInstanceOf[T]
println(t.foo)
Run Code Online (Sandbox Code Playgroud)

能够解决我所有的问题会很棒.

scripting interpreter scala runtime-compilation classloader

10
推荐指数
1
解决办法
5740
查看次数

嵌入式Scala REPL继承父类路径

正如Scala邮件列表中的这个帖子所要求的那样,我如何创建一个继承父程序类路径的嵌入式Scala REPL?假设父Scala程序是使用启动的scala -cp <classpath> ...; 可以<classpath>作为字符串访问并用于初始化嵌入的REPL?(可用的Java类路径System.getProperty("java.class.path")似乎与Scala类路径不同.)

或者,也许嵌入式Scala REPL可以从父进程继承或构造其ClassLoader(MichaelDürig的ScalaDays 2010谈话可能是相关的).这是推荐的方法吗?

scala

8
推荐指数
1
解决办法
1887
查看次数

如何在Scala3中编译并在运行时执行scala代码?

我想使用 Scala3 编译并执行在运行时以字符串形式给出的 Scala 代码。例如在 Scala 2 中我会使用 Reflection

import scala.reflect.runtime.universe as ru
import scala.tools.reflect.ToolBox
val scalaCode = q"""println("Hello world!")"""
val evalMirror = ru.runtimeMirror(this.getClass.getClassLoader)
val toolBox = evalMirror.mkToolBox()
toolBox.eval(scalaCode) //Hello world!
Run Code Online (Sandbox Code Playgroud)

如果我尝试在 Scala3 中运行这段代码,我会得到

Scala 2 macro cannot be used in Dotty. See https://dotty.epfl.ch/docs/reference/dropped-features/macros.html
To turn this error into a warning, pass -Xignore-scala2-macros to the compiler
Run Code Online (Sandbox Code Playgroud)

我如何在 Scala3 中翻译这段代码?

java macros scala scala-macros scala-3

5
推荐指数
1
解决办法
1597
查看次数

Scala 中的动态代码评估

将代码片段注入 Scala 的最佳方法是什么?类似于 javascript 和 GroovyScriptEngine 中的 eval 。我想将我的规则/计算/公式保留在实际数据处理类之外。我有将近 100 多个公式要执行。所有数据流都是相同的,只是公式发生了变化。在 Scala 中最好的方法是什么?并且公式的数量会随着时间的推移而增长。

scala eval scalatest scala-collections

4
推荐指数
1
解决办法
4146
查看次数

如何以编程方式编译和运行 Scala 代码

我有以下代码,我想即时编译并运行它。

object HelloWorld {
  def main(args: Array[String]): Unit = {
    println("Hello, world!")
  }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试过如下所示:

import scala.reflect.runtime.currentMirror
import scala.tools.reflect.ToolBox

object MainScala {
  def main(args: Array[String]): Unit = {
    val toolbox = currentMirror.mkToolBox()
    val source =
      """
        |object HelloWorld {
        |  def main(args: Array[String]): Unit = {
        |    println("Hello, world!")
        |  }
        |}
        |""".stripMargin
    val tree = toolbox.parse(source)
    val binary = toolbox.compile(tree)
    var c = binary.getClass
    val m = c.getMethod("main", classOf[Array[String]])
    val params = Array("Apple", "Banana", "Orange")
    m.invoke(null, null)
  }
} …
Run Code Online (Sandbox Code Playgroud)

reflection scala scala-compiler scala-reflect

2
推荐指数
1
解决办法
302
查看次数