簡體   English   中英

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

[英]Does Scala have an equivalent to Haskell's Prelude.read?

在Haskell中,我可以寫入read "(1,2)"並返回元組(1,2) 在Scala有什么辦法嗎? 我想我正在尋找的是訪問scala解釋器中的解析器。

我試過在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包]

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

記住這些問題:

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

有關於Scala編譯器的信息( 如在此線程中 ),但它可能已過時:如果您需要詳細信息,則可能必須下載源並生成scaladoc。

我沒有你使用它的動機,但如果你不需要Scala,你也可以對JSR 223:Java™Platform API的腳本感興趣。

如果您只想加載數據結構,您應該考慮其他方法,例如可以從Maven 下載直接下載的 Lift JSON庫。 該庫允許您序列化/反序列化案例類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM