Вызов метода в Scala из пользовательского ввода - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть пользовательский ввод:

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 голосов
/ 29 декабря 2018

Если пользователь должен иметь возможность вызывать только определенные методы или иметь простую грамматику, вы можете написать простой парсер, использующий отражение. Scala fastparse - действительно отличная утилита.

Если пользователь сможет вводить произвольный код scala, вы можете использовать реализацию scala сценария JSR 223 api .или вы можете скомпилировать код во время выполнения, как описано в этом вопросе .

Имейте в виду, что это позволяет выполнять произвольный код на вашем компьютере.Не открывайте этот интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...