Khi tôi muốn đọc trong một S-biểu hiện lưu trữ trong một tập tin vào một chương trình Common Lisp chạy, tôi thực hiện như sau:Clojure: Tương đương với chức năng Common Lisp READ?
(defun load-file (filename)
"Loads data corresponding to a s-expression in file with name FILENAME."
(with-open-file (stream filename)
(read stream)))
Nếu, ví dụ, tôi có một tập tin có tên foo.txt
chứa S -Thông báo (1 2 3)
, hàm trên sẽ trả về biểu thức S nếu được gọi như sau: (load-file "foo.txt")
.
Tôi đã tìm kiếm và tìm kiếm và không tìm thấy giải pháp thanh lịch như nhau ở Clojure. Bất kỳ ý tưởng?
Cảm ơn!
Hi, lợi thế, nếu có, của phương pháp này trên (đọc chuỗi là gì (Slurp "foo.txt")) – jkndrkn
'slurp' /' io/slurp * 'slurp toàn bộ nội dung của tệp trong, mặc dù' read-string' sẽ chỉ đọc một dạng nguyên bản và loại bỏ phần còn lại. Cách tiếp cận 'with-in-reader' sẽ chỉ đọc một chút qua form đầu tiên (do đệm). Ngoài ra, bạn có thể có nhiều biểu mẫu hơn trong phần nội dung 'with-in-reader'; đặc biệt, các lời gọi tiếp theo của 'read' trong cùng một biểu mẫu' with-in-reader' sẽ trả về các biểu mẫu khác từ tệp. (Hãy thử sử dụng '[(đọc) (đọc)] 'làm cơ thể để có được hai dạng ban đầu.) Tôi đã đăng câu trả lời của bạn bên cạnh câu trả lời này mà tôi đã nghĩ về nó. :-) –