Tóm lại, các ~
đánh giá biểu thức trong biểu mẫu được trích dẫn cú pháp giống như nó cho ~fn-name
. Trong trường hợp này, biểu thức để đánh giá là 'name
, trong đó kết quả là biểu tượng không đủ tiêu chuẩn name
.
Tuy nhiên, hãy chia nhỏ từng phần này một lần.
Nếu bạn chỉ có biểu tượng không đủ tiêu chuẩn name
, nó sẽ được đánh giá là clojure.core/name
khi chạy . Điều này sẽ dẫn đến một hình thức defn
không chính xác và gây ra một ngoại lệ trình biên dịch.
(defn greeting [clojure.core/name] (str "Hello" name))
Nếu bạn chỉ có biểu tượng không đủ tiêu chuẩn được trích dẫn 'name
, nó sẽ vẫn được đánh giá khi chạy. Sự khác biệt là nó sẽ mở rộng đến (quote clojure.core/name)
. Một lần nữa, điều này sẽ dẫn đến một hình thức defn
không chính xác và gây ra một ngoại lệ trình biên dịch.
(defn greeting [(quote clojure.core/name)] (str "Hello" name))
Cuối cùng, bằng cách sử dụng ~'name
, bạn sẽ có dạng trích dẫn đánh giá tại thời gian biên dịch, kết quả là biểu tượng không đủ tiêu chuẩn name
, để lại cho bạn một hình thức thích hợp defn
.
(defn greeting [name] (str "Hello" name))
1 - Điều này đúng cho ví dụ này bởi vì nó giả định khác name
chức năng không tồn tại.
Ví dụ này đến từ đâu? –
Tôi đã viết nó. Nó hoạt động như mong đợi. Tuy nhiên, ~ 'chỉ là thử và sai, vì vậy muốn biết tại sao nó hoạt động. – murtaza52