Suppose that I have the following piece of Kotlin code:
fun main(args: Array) {
val a = \"test\"
println(args.first())
}
Is there some way to evaluate Strings that aren't in the source code with regards to templates in their current context?
There are no template strings in your code sample and a
is unused. Am I understanding correctly that you'd like to do something like val evaluated = evalStringTemplate(template, arg1, arg2, ...)
with template
being a String
like "$a"
and arg1, arg2, ... being arguments for the template?
If so, there's no Kotlin-specific way to do this, but you can use the Java Formatter class.
If you need to evaluate arbitrary expressions in this way, then yes, you need a scripting engine. Kotlin has a JSR 223 implementation that you can use, see the examples here (the kotlin-jsr223-* projects).
Here is a basic usage example:
val engine = ScriptEngineManager().getEngineByExtension("kts")!!
engine.eval("val x = 3")
val res = engine.eval("x + 2")
Assert.assertEquals(5, res)
The code is taken from KotlinJsr223ScriptEngineIT.kt, and remember to configure the service via META-INF