Clojure: Эквивалентный функции ЧТЕНИЯ языка Common LISP?

Когда я хочу читать в S-выражении, сохраненном в файле в под управлением программу языка Common LISP, я делаю следующее:

(defun load-file (filename)
  "Loads data corresponding to a s-expression in file with name FILENAME."
  (with-open-file (stream filename)
    (read stream)))

Если, например, мне назвали файл foo.txt это содержит S-выражение (1 2 3), вышеупомянутая функция возвратит то S-выражение, если названо следующим образом: (load-file "foo.txt").

Я искал и искал и не нашел одинаково изящное решение в Clojure. Какие-либо идеи?

Спасибо!

11
задан jkndrkn 18 May 2010 в 00:56
поделиться

2 ответа

Вы можете, например,

(require '[clojure.contrib.io :as io])

(io/with-in-reader (io/file "foo.txt") (read))
; => (1 2 3)

Обратите внимание, что вы, вероятно, сначала захотите повторно привязать * read-eval * к false . Также обратите внимание, что приведенное выше работает с текущим contrib HEAD (и почти наверняка будет работать в 1.2, когда он будет выпущен); для Clojure 1.1 такая же функциональность доступна в пространствах имен clojure.contrib.duck-streams и clojure.contrib.java-utils .

8
ответ дан 3 December 2019 в 08:28
поделиться

Я нашел решение здесь: Как вы оцениваете строку как выражение clojure?

(read-string (slurp "foo.txt"))

Извините за беспокойство, ребята ^ _ ^

6
ответ дан 3 December 2019 в 08:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: