在Haskell中,我可以编写read "(1,2)"
并返回元组(1,2)
。在Scala有什么办法吗?我想我正在寻找的是访问scala
解释器中的解析器。
答案 0 :(得分:11)
我试过在scala.tools.nsc中找到答案吗?
是否足以满足您的需求(或者至少是一个良好的起点)?
scala> val interpreter = new tools.nsc.Interpreter
interpreter: scala.tools.nsc.Interpreter = scala.tools.nsc.Interpreter@522c5afb
scala> interpreter interpret "(3, 5)"
res0: (Int, Int) = (3,5)
res139: scala.tools.nsc.InterpreterResults.Result = Success
scala> interpreter interpret "1 to 10 toList"
res1: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
res140: scala.tools.nsc.InterpreterResults.Result = Success
[编辑:似乎不推荐使用tools.nsc.Interpreter。现在有一个tools.nsc.interpreter包]
答案 1 :(得分:1)
您可能对Scala编译器API感兴趣。您可能需要编译源并运行它。这是AFAIK在Scala解释器中的完成方式。
请记住以下问题:
有关于Scala编译器(as in this thread)的信息,但它可能已过时:如果您需要详细信息,则可能需要下载源并生成scaladoc。
我没有动力使用它,但如果你不需要Scala,你也可以对JSR 223: Scripting for the Java™ Platform API感兴趣。
如果您只想加载数据结构,则应考虑其他方法,例如:提升您可以download from Maven或directly download的JSON库。该库允许您序列化/反序列化案例类。