Есть ли у Scala эквивалент Prelude.read на Haskell? - PullRequest
2 голосов
/ 26 февраля 2011

В Хаскеле я могу написать read "(1,2)" и вернуть кортеж (1,2). Есть ли способ сделать это в Scala? Я предполагаю, что мне нужен доступ к парсеру в интерпретаторе scala.

Ответы [ 2 ]

11 голосов
/ 27 февраля 2011

Вы пытались покопаться в 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

[Edit: кажется, что tools.nsc.Interpreter устарела.Теперь есть пакет tools.nsc.interpreter]

1 голос
/ 26 февраля 2011

Вас может заинтересовать API компилятора Scala. Вам, вероятно, нужно скомпилировать исходный код и запустить его. Это AFAIK, как это делается в интерпретаторе Scala.

Запомните эти проблемы:

  • Это может быть медленно.
  • Это может быть узким местом в многопоточных приложениях. Загрузка класса AFAIK требует синхронизации (из-за JIT и т. Д.).
  • Это может быть небезопасно. Вас может заинтересовать установка ограничений безопасности JVM.

Существует информация о компиляторе Scala ( как в этой теме ), но она может быть устаревшей: если вам нужна подробная информация, вам, вероятно, придется загрузить исходный код и сгенерировать скаляр.

У меня нет мотивации использовать его, но вас также может заинтересовать JSR 223: создание сценариев для API платформы Java ™ , если вам не нужен Scala.

Если вы хотите загружать только структуры данных, вам следует рассмотреть другие способы, например, Поднимите JSON-библиотеку, которую вы можете скачать с Maven или , напрямую загрузить . Библиотека позволяет сериализовать / десериализовать классы дел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...