Có printf. Nó in trực tiếp đến stdout.Clojure sprintf?
Làm thế nào về sprintf, định dạng giống như printf, nhưng trả về một chuỗi không có tác dụng phụ?
Có printf. Nó in trực tiếp đến stdout.Clojure sprintf?
Làm thế nào về sprintf, định dạng giống như printf, nhưng trả về một chuỗi không có tác dụng phụ?
Trong Clojure, nó được gọi là format và nằm trong clojure.core
: printf
tương đương với (comp print format)
.
Bạn nên kiểm tra cl-format
, trong thư viện clojure.pprint
. Đó là một cổng chức năng FORMAT của Common Lisp. Nó có thể làm những việc mà Java printf
không thể làm, như điều kiện, lặp lại trên seqs, v.v.
Để trả lời câu hỏi của bạn, với cl-format
, đối số đầu tiên của nil
sẽ trả về một chuỗi; đối số đầu tiên của true
sẽ in thành STDOUT.
user> (cl-format nil "~{~R~^, ~}" [1 2 3 4])
"one, two, three, four"
Lưu ý rằng nếu format
đã chưa tồn tại trong Clojure, bạn cũng có thể nắm bắt đầu ra từ Clojure của printf
như thế này:
user> (with-out-str (printf "%s" :foo))
":foo"
with-out-str
là hữu ích khi một thư viện chỉ cung cấp một chức năng mà bản in để STDOUT và bạn muốn nắm bắt đầu ra thay thế. Tôi đã chạy trên các thư viện Java làm điều này.
Xem xét sử dụng với-ra-str vĩ mô:
(with-out-str
(print x))
Hoặc chỉ cần gọi phương thức định dạng java.lang.String của:
(String/format "%d" 3)
những libs java sẽ không ghi vào clojure của \ * ra \ *, đúng không? Bạn sẽ cần chiếm đoạt System/setOut bằng PrintWriter sử dụng var. – gtrak