:: được sử dụng để làm gì trong áo choàng?


83

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:


83

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.


Đối với cơ sở lý luận được cung cấp, không hoàn toàn chắc chắn tại sao ngay từ đầu người ta sẽ mày mò một bản đồ mà một thư viện phải xử lý cho họ. Nếu đó thực sự là động lực chính, một số điều làm sáng tỏ có thể hữu ích.
matanster

3
một ví dụ có thể là phần mềm trung gian vòng (tương tự như bộ lọc Servlet), mà bạn có thể làm phong phú thêm bản đồ mô tả một yêu cầu HTTP. Các khóa có chỗ đặt tên cho phép bạn viết phần mềm trung gian tùy chỉnh của mình để thêm các giá trị bổ sung mà không phải lo lắng về sự can thiệp với bất kỳ phần mềm trung gian nào khác được định cấu hình trong ứng dụng chuông của bạn.
skuro

27

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/barsẽ đánh giá để :clojure.core/barnếu foolà một bí danh của clojure.core. Ngoại lệ trình đọc được ném nếu fookhông giải quyết được một không gian tên.


Đó là tính năng được ghi chép lại ở đó - clojure.org/reference/reader#_literals - cljs.github.io/api/syntax/keyword-qualify
maxp

Cũng có liên quan, vì Clojure 1.9, là #:#::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 .
Joe Corneli
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.