Como compilar / avaliar uma expressão Scala em tempo de execução?
Novo no Scala e procurando indicadores para uma solução idiomática, se houver.
Eu gostaria de ter funções arbitrárias Scala fornecidas pelo usuário (que podem fazer referência a funções / classes que defini no meu código) aplicadas a alguns dados.
Por exemplo: eu tenhofoo(s: String): String
ebar(s: String): String
funções definidas no meumyprog.scala
. O usuário executa o meu programa assim:
$ scala myprog data.txt --func='(s: Str) => foo(bar(s)).reverse'
Isso executaria linha por linha no arquivo de dados e emitiria o resultado da aplicação da função especificada pelo usuário a essa linha.
Para obter pontos extras, posso garantir que não haja efeitos colaterais na função definida pelo usuário? Caso contrário, posso restringir a função a ser usadasó um subconjunto restrito de funções (que posso garantir como seguro)?