2012-06-14 21 views
8

Tại sao thư viện clojure sử dụng lại các tên hàm thường xuất hiện buộc bạn không gian tên đủ điều kiện cho chúng? Ví dụ: Ví dụ: clojure.zip sử dụng tiếp theo, thay thế và xóa đã tồn tại trong lõi clojure và "thay thế" đã tồn tại trong clojure.string.tại sao thư viện không cố gắng sử dụng tên duy nhất cho các tên chức năng phổ biến

Bây giờ nhà phát triển có thể sử dụng một số từ viết tắt cho không gian tên clojure.zip vì vậy trong mã của nhà phát triển, clojure.zip/next sẽ là không gian tên đủ điều kiện là z/tiếp theo trong mã của người khác như w/next, v.v. Điều này sẽ buộc bạn phải nhìn lại để xem những gì không gian tên viết tắt thực sự là do nhà phát triển có thể đã tạo thư viện của riêng mình cũng sử dụng chức năng "tiếp theo"

Tại sao không zip-next, zip-replace và zip-loại bỏ, str-thay thế? Hoặc một cái gì đó tương tự như vậy

Sau đó, sẽ có "tiêu chuẩn không gian tên" nhất quán trong mã của mọi người và sẽ rõ ràng những chức năng này đề cập đến.

Nó không giống như có hàng đống tên xung đột giữa các thư viện. Tôi thường chỉ thấy hai hoặc ba. Rất khó để làm cho những tên này trở nên độc đáo với thư viện?

Trả lời

20

Nói chung sử dụng use để bao gồm các thư viện là ít phổ biến hơn so với sử dụng require trong bình thường tìm kiếm đang clojure, vì vậy sử dụng còn tên duy nhất được ít hữu ích khi không gian tên đã truyền tải được ý nghĩa cùng lập trình viên nên clojure có xu hướng thích ngắn gọn tính độc đáo.

thay vì:

(use 'liba 'libb) 

(liba-foo 1 2 3) 
(libb-foo 1 2 2) 

người sau đó có thể viết:

(require ['liba :as 'a] [libb :as 'b]) 

(a/liba-foo 1 2 3) 
(b/libb-foo 1 2 3) 

mà làm cho liba- vẻ ngớ ngẩn, do đó:

(a/foo 1 2 3) 
(b/foo 1 2 3) 
+1

Tôi thích thực tế bạn có thể sử dụng bí danh ngắn hơn cho không gian tên. Cung cấp cho bạn nhiều quyền lực hơn, đó là một chủ đề phổ biến trong Clojure. Mặc dù có thể là vấn đề nếu một số lập trình viên sử dụng bí danh không phù hợp hoặc thậm chí là bí danh dài hơn không gian tên ban đầu. – adamjmarkham

+1

Tôi không thực sự hiểu bình luận CL của bạn; có rất nhiều tên ngắn thực sự trong CL và những cái dài dường như không liên quan đến việc đặt tên. –

+0

Tôi phải thừa nhận rằng nhận xét đến từ sự bối rối cá nhân của tôi với một vài thư viện. Xin lỗi CL folks, tôi sẽ chơi tốt :-( –

9

Nếu bạn đang đi để yêu cầu các tên đó là duy nhất toàn cầu, tại sao lại có không gian tên? Nếu tôi định nghĩa thư viện icecream, và tiền tố mỗi tên hàm với icecream, không ai có thể xung đột.

Nhưng điều này là vô cùng bất tiện cho cả hai bên - tất cả chúng ta phải tiếp tục gõ tiền tố ngu ngốc này hơn và hơn. Nếu thay vì icecream-scoop, tôi chỉ đặt tên cho hàm scoop của tôi bên trong icecream không gian tên, bạn có thể chọn cách tham chiếu đến nó: bạn có thể gọi nó là scoop nếu nó rõ ràng từ ngữ cảnh và không xung đột với không gian tên của bạn, hoặc icecream/muỗng, hoặc món tráng miệng/muỗng, bất cứ điều gì bạn cần để làm cho nó đọc tốt.

+0

Những tên chức năng như thay thế, xóa, đảo ngược quá phổ biến đến mức bạn không thể biết ý nghĩa của chúng nếu chúng không phải là không gian tên đủ điều kiện. Do đó bạn PHẢI đặt tên cho không gian đủ điều kiện cho họ. Bạn không thể chỉ sử dụng "thay thế" trong mã của bạn, bây giờ bạn sẽ có ý nghĩa gì nhưng những người khác sẽ không và họ sẽ phải dừng lại và tìm ra không gian tên thuộc về nó. Nhưng bây giờ mọi người có sự lựa chọn để không gian tên đủ điều kiện họ với bất cứ abrev để nó trở nên khó hiểu. Nếu họ là không gian tên đủ điều kiện như (ví dụ) str-thay thế thì nó sẽ được rõ ràng trong mã của mọi người. –

+0

Và tôi không nói thêm tiền tố vào TẤT CẢ các hàm trong thư viện. Chỉ dành cho những hàm có tên phổ biến có khả năng xung đột với các hàm trong các không gian tên khác. SUCH là thay thế, ngược lại, vv Đây là những điều rất phổ biến mà chúng được đảm bảo xung đột –

+0

Vì vậy, thư viện 'icecream' của tôi có các chức năng như muỗng, vị, vị và loại bỏ kem? Đó là khủng khiếp cho sự nhất quán - người dùng phải nhớ những chức năng có một tiền tố trong tên và không. Tôi không muốn gọi 'join' và' str-replace'; 'str/join' và' str/replace' dễ viết và dễ đọc hơn. – amalloy