Я хочу написать простой скрипт Scala, который запускает некоторые методы, определенные в другом файле.Запустите скрипт и получите результат каждой строки
Для каждой строки, использующей этот метод, требуется информация, которая не будет доступна до выполнения. Для простоты я хочу отвлечь эту часть.
Таким образом, я хочу использовать Currying для получения результата каждой строки в скрипте, а затем снова запустить результат с дополнительными данными.
object TestUtil {
// "control" is not known until runtime
def someTestMethod(x: Int, y: Int)(control: Boolean): Boolean = {
if (control) {
assert(x == y)
x == y
} else {
assert(x > y)
x > y
}
}
}
someTestMethod определен в моей основной кодовой базе.
// testScript.sc
import <whateverpath>.TestUtil
TestUtil.someTestMethod(2,1)
TestUtil.someTestMethod(5,5)
Каждая строка должна возвращать функцию, которую мне нужно выполнить с помощью булева.
val control: Boolean = true
List[(Boolean) -> Boolean) testFuncs = runFile("testScript.sc")
testFuncs.foreach(_(control)) // Run all the functions that testScripts defined
(Извините, если это странный пример, это самое простое, что я могу думать)
До сих пор я понял, как разобрать сценарий, и получить дерево. Однако в этот момент я не могу понять, как выполнить каждый отдельный объект дерева и получить результат. Это в основном, где я застрял!
val settings = new scala.tools.nsc.GenericRunnerSettings(println)
settings.usejavacp.value = true
settings.nc.value = true
val interpreter: IMain = new IMain(settings)
val treeResult: Option[List[Tree]] = interpreter.parse(
"""true
| 5+14""".stripMargin)
treeResult.get.foreach((tree: Tree) => println(tree))
результатом которого является
истинные
5. $ плюс (14)
, где 5 + 14 не была оценена, и не могу выяснить, как, или если это даже стоящий маршрут для проведения