Cả hai dường như đang làm điều tương tự trong Clojure. Cú pháp nào là kinh điển?Nhập giá trị trả về gợi ý bằng^hoặc: thẻ meta?
(defn a ^int [] 4)
(defn b ^{:tag int} [] 4)
Tôi hy vọng nó là a
vì ngắn hơn.
Cả hai dường như đang làm điều tương tự trong Clojure. Cú pháp nào là kinh điển?Nhập giá trị trả về gợi ý bằng^hoặc: thẻ meta?
(defn a ^int [] 4)
(defn b ^{:tag int} [] 4)
Tôi hy vọng nó là a
vì ngắn hơn.
Tôi chỉ sử dụng b
khi tôi cần bao gồm siêu dữ liệu khác ngoài thẻ. Ví dụ, khi thực hiện một bộ sưu tập thoáng qua, tôi cần
(deftype Whatever [^{:tag ITransientVector
:unsynchronized-mutable true} foo])
Lưu ý rằng nó sẽ là tương đương và hoàn toàn chấp nhận để viết
(deftype Whatever [^:unsynchronized-mutable ^ITransientVector foo])
nhưng cá nhân tôi thích bản đồ rõ ràng.
'a' của nó là kinh điển. Là người duy nhất tôi đã thấy cho đến nay trong mã Clojure và trong tài liệu trên trang Clojure. Xem here để biết thêm thông tin về các gợi ý loại.
Hy vọng điều này sẽ hữu ích.
Tôi sẽ rất ngạc nhiên nếu có sự khác biệt về tốc độ. Nó * có thể * biên dịch tóc nhanh hơn, nhưng nó sẽ chạy như nhau, và biên dịch chỉ xảy ra một lần. Bạn có chuẩn mực tiện dụng mà bạn đã sử dụng để kiểm tra điều này? – amalloy
+1 Quyền của bạn, được kiểm tra một lần nữa và thời gian thực hiện khác nhau đối với tôi nhưng họ nhìn cả hai đều tương tự như vậy có lẽ không có tăng tốc độ. Đã chỉnh sửa bài đăng cho phù hợp. – adamjmarkham
+1. Cũng đáng chú ý rằng (a) thực sự chỉ là cú pháp đường cho (b) vì vậy chúng tạo ra kết quả tương tự khi chạy. – mikera
Thực tế, việc nhập gợi ý một hàm vào int không hoạt động nữa. tất cả đều dài và đôi. Và có tất cả các kết hợp có thể được thêm vào đây: https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/IFn.java#L97 Và nó không phải là điên như nó có vẻ. – claj
@claj Thưa Chúa, tôi hy vọng mã đó được tạo ra bằng cách nào đó. Nếu không, tôi cảm thấy tiếc cho bất cứ điều gì nghèo sap đã bị mắc kẹt với công việc đó. – Carcigenicate
Có lẽ là sự kết hợp của https://github.com/clojure/math.combinatorics và https://clojuredocs.org/clojure.pprint/cl-format – claj