Tôi khá mới đối với Clojure và tôi không chắc mình hoàn toàn hiểu được sự khác biệt giữa dấu nháy đơn và dấu gạch chéo ngược trong Clojure.Clojure - sự khác biệt giữa '(dấu nháy đơn) và `(backtick)
(def x 5)
;; Question 1
(+ x x) ;; evaluates to 10
'(+ x x) ;; evaluates to (+ x x)
`(+ x x) ;; evaluates to (clojure.core/+ user/x user/x)
;; Question 2
`(~+ ~x ~x) ;; evaluates to (#<core$_PLUS_ [email protected]> 5 5)
- Đúng tôi nếu tôi là sai, nhưng có vẻ như với tôi apostrophe có thể ngăn chặn tất cả các ký tự (ví dụ: + và x) từ giải quyết để tương ứng var của họ, trong khi backtick cho phép các biểu tượng để giải quyết để var của họ (nhưng không đánh giá các giá trị trong var). Nó thật sự đúng?
- Biểu tượng unquote (~) chính xác làm gì ở đây? Có phải nó đang đánh giá var đến giá trị thực của nó (tức là biểu tượng + cho đối tượng hàm và biểu tượng x cho đối tượng số) không? Nếu bạn có thể giải thích điều này về các giai đoạn READ-COMPILE-EVAL của Clojure, điều đó cũng sẽ hữu ích.
Câu trả lời hay. Có một bài đăng trên blog tuyệt vời ở đây nếu bạn muốn tìm hiểu sâu hơn: https://blog.8thlight.com/colin-jones/2012/05/22/quoting-without-confusion.html –
Xem tất cả các ví dụ đó trực tiếp với KLIPSE http: //app.klipse.tech/?cljs_in=(ns%20my.ns)%0A%0A%5B%0A%20%20 '(% 2B% 20x% 20x)% 20% 0A% 20% 20% 60 (% 2B% 20x% 20x)% 0A% 20% 20% 60 (~ '% 2B% 20x% 20x)% 0A% 20% 20% 60 (% 2B% 20 ~% 40% 60 (% 2B% 20x% 20x))% 0A% 5D% 0A – viebel