2011-02-26 43 views

回答

11

我試過在scala.tools.nsc中搜索嗎?

是否足夠滿足您的需求(或者至少是一個好的起點)?

scala> val interpreter = new tools.nsc.Interpreter 
interpreter: scala.tools.nsc.Interpreter = [email protected] 

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包]

+0

這是完美的 - 謝謝! – Bill 2011-02-27 00:59:49

+0

也看看'eval'。你必須提供類型,但是它特別有用,因爲它返回表達式結束的任何類型。 – 2011-02-27 21:19:47

1

您可能會對Scala編譯器API感興趣。您可能需要編譯源代碼並運行它。這是AFAIK它是如何在Scala解釋器中完成的。

記住了這些問題:

  • 它可能會很慢。
  • 它可能是多線程應用程序的瓶頸。加載一個類AFAIK需要同步(因爲JIT等)。
  • 它可能是不安全的。您可能有興趣設置JVM安全限制。

有關於Scala編譯器(as in this thread)的信息,但它可能會過時:如果你需要一個詳細的信息,你可能會下載源代碼,並生成scaladoc。

我不會使用它的動機,但如果你不需要Scala,你也可以對JSR 223: Scripting for the Java™ Platform API感興趣。

如果你只想加載數據結構,你應該考慮另一種方式,例如,提起JSON庫,你可以download from Mavendirectly download。該庫允許您序列化/反序列化案例類。

+0

謝謝!編譯器本身可能太重了。我希望能夠閱讀「[Foo(3,3),」foo「,4]」之類的東西,然後獲取Scala數據結構。有沒有辦法做到這一點,而不使用編譯器API? – Bill 2011-02-26 20:11:11

+1

那麼,如果你只想讀一個結構,那麼使用Lift JSON反序列化呢? – v6ak 2011-02-26 20:17:21

+2

,如果json不是你的毒藥,那麼試試scala中的解析器支持,scala就是這樣設計的。 – 2011-02-26 21:58:50