Tôi hiểu các từ khóa trong Clojure being :keyword
. Nhưng ::
dùng để làm gì? Tại sao nó giống như nó có một ràng buộc?
user=> :foo
:foo
user=> ::foo
:user/foo
Tôi hiểu các từ khóa trong Clojure being :keyword
. Nhưng ::
dùng để làm gì? Tại sao nó giống như nó có một ràng buộc?
user=> :foo
:foo
user=> ::foo
:user/foo
Câu trả lời:
Dấu hai chấm ở đó để đủ điều kiện từ khóa với không gian tên hiện tại của bạn. Điều này nhằm tránh đụng độ tên cho các từ khóa có ý nghĩa đối với các thư viện khác nhau. Nếu không có các từ khóa đủ điều kiện, bạn có thể vô tình ghi đè một số giá trị trong bản đồ và phá vỡ khả năng tương thích với thư viện.
Như hiện đã được ghi nhận cho Clojure cũng như cho ClojureScript , ::
các từ khóa cũng có thể được sử dụng để giải quyết các bí danh không gian tên. Ví dụ, ::foo/bar
sẽ đánh giá để :clojure.core/bar
nếu foo
là một bí danh của clojure.core
. Ngoại lệ trình đọc được ném nếu foo
không giải quyết được một không gian tên.
#:
và #::
cú pháp, được sử dụng cùng với bản đồ để giải quyết các từ khóa bên trong bản đồ, như được giải thích ở đây .