thoảng khi nhìn vào mã Clojure của người khác, tôi thấy một chức năng được xác định thông qua defn
và sau đó được gọi bằng cách sử dụng cú pháp var-báo giá, ví dụ:Gọi chức năng Clojure sử dụng var-quote cú pháp
user> (defn a [] 1)
#'user/a
user> (a) ; This is how you normally call a function
1
user> (#'a) ; This uses the var-quote syntax and produces the same result
1
Đối với cuộc sống của tôi không thể tìm ra sự khác biệt giữa hai cách gọi một hàm này. Tôi không thể tìm thấy bất cứ điều gì trong tài liệu evaluation phải nói gì sẽ xảy ra khi các nhà điều hành của một cuộc gọi là một var mà có thể đề nghị tại sao hình thức thứ hai sẽ được ưa thích. Cả hai dường như đều phản hồi trong cùng một số binding
bài tập và trích dẫn cú pháp.
Vì vậy, ai đó có thể vui lòng cung cấp mẫu mã sẽ minh họa sự khác biệt giữa (a)
và (#'a)
ở trên?
Edit: Tôi biết rằng var-quote thể được sử dụng để có được một var đó là lu mờ bởi một ràng buộc let
từ vựng, nhưng điều đó dường như không phải là trường hợp trong các mã mà tôi đang nhìn.
Điểm tốt - bây giờ bạn đề cập đến điều này, tôi nhớ đã tự mình làm điều này trong quá khứ. Nhưng đoạn code tôi đang nhìn đang kêu gọi một fn không tin, vì vậy tôi nghĩ rằng tránh các bộ nhớ đệm của giá trị hiện-bound là lời giải thích nhiều khả năng. – Alex
Vì mã nằm trong kho lưu trữ riêng tư. Tôi đã đăng một câu hỏi chung, có hai câu trả lời hay, và chỉ có thể chấp nhận một câu trả lời, vì vậy tôi chấp nhận câu trả lời mà tôi cảm thấy tốt hơn khi trả lời cho trường hợp chung. – Alex