用户输入中Scala中的调用方法

时间:2018-12-29 16:57:08

标签: scala reflection

我有一个用户输入:

val method = """doReplace(doReplace("ab","a","x"),"b","y")"""

如何在运行时使用Scala调用此方法:

object test2 {

  def doReplace(str: String, oldChar: String, newChar: String) = {
    str.replace(oldChar, newChar)
  }

  def main(args: Array[String]): Unit = {

    val method = """doReplace(doReplace("ab","a","x"),"b","y")"""

  }

} 

1 个答案:

答案 0 :(得分:3)

如果用户只能调用某些方法或具有简单的语法,则可以编写一个使用反射的简单解析器。 Scala fastparse是非常有用的工具。

如果用户应该能够输入任意Scala代码,则可以使用scala implementation of the JSR 223 scripting api,也可以按照this question中的描述在运行时编译代码。

请注意,这允许您在计算机上执行任意代码。不要公开此界面。