¿Cómo compilar / evaluar una expresión Scala en tiempo de ejecución?

Nuevo en Scala y buscando punteros a una solución idiomática, si hay una.

Me gustaría tener funciones arbitrarias de Scala proporcionadas por el usuario (que pueden hacer referencia a funciones / clases que he definido en mi código) aplicadas a algunos datos.

Por ejemplo: tengofoo(s: String): String ybar(s: String): String funciones definidas en mimyprog.scala. El usuario ejecuta mi programa así:

$ scala myprog data.txt --func='(s: Str) => foo(bar(s)).reverse'

Esto se ejecutaría línea por línea a través del archivo de datos y emitiría el resultado de aplicar la función especificada por el usuario a esa línea.

Para obtener puntos adicionales, ¿puedo asegurarme de que no haya efectos secundarios en la función definida por el usuario? Si no, ¿puedo restringir la función para usar?solamente ¿Un subconjunto restringido de funciones (que puedo asegurar que es seguro)?

Respuestas a la pregunta(2)

Su respuesta a la pregunta