Scala是否与Haskell';读什么?
在Haskell中,我可以编写Scala是否与Haskell';读什么?,scala,Scala,在Haskell中,我可以编写读取“(1,2)”并返回元组(1,2)。在Scala中有什么方法可以做到这一点吗?我想我要找的是在scala解释器中访问解析器。您可能对scala编译器API感兴趣。您可能需要编译源代码并运行它。这是在Scala解释器中如何完成的 记住这些问题: 它可能很慢 Ït可能是多线程应用程序中的瓶颈。加载类AFAIK需要同步(因为JIT等) 它可能是不安全的。您可能对设置JVM安全限制感兴趣 有一个关于Scala编译器()的信息,但它可能已经过时:如果您需要详细的信息,
读取“(1,2)”
并返回元组(1,2)
。在Scala中有什么方法可以做到这一点吗?我想我要找的是在scala
解释器中访问解析器。您可能对scala编译器API感兴趣。您可能需要编译源代码并运行它。这是在Scala解释器中如何完成的
记住这些问题:
- 它可能很慢
- Ït可能是多线程应用程序中的瓶颈。加载类AFAIK需要同步(因为JIT等)
- 它可能是不安全的。您可能对设置JVM安全限制感兴趣
如果您只想加载数据结构,则应该考虑其他方法,例如,可以使用或不支持的JavaJSON库。该库允许您序列化/反序列化案例类。
您是否尝试在scala.tools.nsc中浏览 这样的事情是否足以满足你的需要(或者至少是一个好的起点)[编辑:tools.nsc.Interpreter似乎已被弃用。现在有一个tools.nsc.Interpreter包]谢谢!编译器本身可能太重了。我希望能够读入类似“[Foo(3,3),“Foo”,4]”的内容,并获取Scala数据结构。有没有一种不用编译器API就能做到这一点的方法?如果你只想读取一个结构,那么使用Lift JSON反序列化怎么样?如果JSON不是你的毒药,那么试试scala中的解析器支持,它的设计正是以这种方式工作的。还可以看看
eval
。您必须提供类型,但它特别有用,因为它返回表达式结尾的任何类型。
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