Tôi đang học Clojure. Tuy nhiên, tôi không có sự hiểu biết tốt cho ngôn ngữ và triết lý.Sự khác biệt giữa toán tử dấu chấm và cuộc gọi có tên đủ điều kiện trong Clojure
Nhưng tôi muốn làm quen với ngôn ngữ hơn. Do đó Tôi đã bắt đầu đọc tài liệu API lõi của Clojure và tìm thấy một số nội dung thú vị trong mã nguồn clojure.core/get
.
(defn get
"Returns the value mapped to key, not-found or nil if key not present."
{:inline (fn [m k & nf] `(. clojure.lang.RT (get ~m ~k [email protected])))
:inline-arities #{2 3}
:added "1.0"}
([map key]
(. clojure.lang.RT (get map key)))
([map key not-found]
(. clojure.lang.RT (get map key not-found))))
Để nhận giá trị bằng mã khóa đã cho, mã này sử dụng chức năng clojurelang.RT/get
. Toán tử dấu chấm cuộc gọi mã - (. clojure.lang.RT (get map key))
.
Câu hỏi của tôi là lý do tác giả viết (. clojure.lang.RT (get map key))
thay vì (clojure.lang.RT/get map key)
.
Có sự khác biệt về kỹ thuật nào không? hoặc bất kỳ lợi ích nào?
Cú pháp 'classname/method' đã được xác định trước định nghĩa chưa? Tôi đoán là 'clojure.lang.RT/get' sẽ là lỗi cú pháp tại thời điểm này trong quá trình biên dịch. – ToBeReplaced
'' mã clojure.core'' có lẽ không phải là một nơi tốt để bắt đầu hiểu triết lý ngôn ngữ, vì nó có xu hướng sử dụng các biểu mẫu mức thấp nhất. Bạn nên xem các thư viện được thiết lập tốt hơn như đổ chuông cho một trừu tượng HTTP sạch (https://github.com/mmcgrana/ring/) hoặc compojure cho một DSL định tuyến (https://github.com/weavejester/compojure) – sw1nn