我有一个用户输入:
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")"""
}
}
答案 0 :(得分:3)
如果用户只能调用某些方法或具有简单的语法,则可以编写一个使用反射的简单解析器。 Scala fastparse是非常有用的工具。
如果用户应该能够输入任意Scala代码,则可以使用scala implementation of the JSR 223 scripting api,也可以按照this question中的描述在运行时编译代码。
请注意,这允许您在计算机上执行任意代码。不要公开此界面。