Scala是否与Haskell的Prelude.read等效?

时间:2011-02-26 19:39:47

标签: scala

在Haskell中,我可以编写read "(1,2)"并返回元组(1,2)。在Scala有什么办法吗?我想我正在寻找的是访问scala解释器中的解析器。

2 个答案:

答案 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解释器中的完成方式。

请记住以下问题:

  • 可能很慢。
  • Ït可能是多线程应用程序的瓶颈。加载类AFAIK需要同步(因为JIT等)。
  • 可能不安全。您可能对设置JVM安全限制感兴趣。

有关于Scala编译器(as in this thread)的信息,但它可能已过时:如果您需要详细信息,则可能需要下载源并生成scaladoc。

我没有动力使用它,但如果你不需要Scala,你也可以对JSR 223: Scripting for the Java™ Platform API感兴趣。

如果您只想加载数据结构,则应考虑其他方法,例如:提升您可以download from Mavendirectly download的JSON库。该库允许您序列化/反序列化案例类。