在Haskell中,我可以編寫read "(1,2)"
並取回元組(1,2)
。有什麼辦法可以在Scala中做到這一點?我想我要找的是解釋器scala
中的解析器。斯卡拉是否與Haskell的Prelude.read等價嗎?
2
A
回答
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包]
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 Maven或directly download。該庫允許您序列化/反序列化案例類。
相關問題
- 1. 斯卡拉 - Haskell的序列
- 2. 斯卡拉的Haskell do-notation或F#計算表達式的等價物?
- 3. 是什麼〜斯卡拉嗎?
- 4. JavaScript是否與Python的__getattribute__等價嗎?
- 5. sqlite是否與MySQL的--execute等價嗎?
- 6. Isabelle等價於Haskell newtype嗎?
- 7. 與斯卡拉
- 8. 與斯卡拉
- 9. 斯卡拉方法與=(等號)
- 10. 卡夫卡與斯卡拉
- 11. 斯卡拉的匹配表達與否?
- 12. 斯卡拉與類型檢查相等嗎?
- 13. Python是否與Haskell的'mask'或'bracket'函數等價?
- 14. 斯卡拉標準等效
- 15. 斯卡拉參考平等
- 16. 斯卡拉的嘗試是否透明?
- 17. 與play2.5斯卡拉
- 18. 斯卡拉 - 與Iterator.toList
- 19. 阿卡與斯卡拉IDE
- 20. 斯卡拉是否等同於謂詞函數?
- 21. 斯卡拉 - 這是封閉嗎?
- 22. 斯卡拉期貨返回的價值
- 23. 斯卡拉的這個加密和解密代碼的等價物是什麼?
- 24. 斯卡拉中是否有lambda函數?
- 25. 是否有可能在斯卡拉
- 26. 斯卡拉是否有警衛?
- 27. 是否有可能在斯卡拉
- 28. 是否有可能在斯卡拉
- 29. 斯卡拉貓:是否有確保方法嗎?
- 30. 斯卡拉價值是不是類型參數的成員
這是完美的 - 謝謝! – Bill 2011-02-27 00:59:49
也看看'eval'。你必須提供類型,但是它特別有用,因爲它返回表達式結束的任何類型。 – 2011-02-27 21:19:47