2012-03-04 21 views
15

Một khuyến nghị thường thấy trên thực hành tốt nhất về Moose như sau:Tại sao "sử dụng namespace :: autoclean" được ưu tiên là "no Moose"?

"Các bit sử dụng namespace::autoclean chỉ đơn giản là mã vệ sinh tốt, vì nó loại bỏ biểu tượng từ không gian tên của lớp học của bạn nhập khẩu vào cuối chu kỳ biên dịch của gói của bạn, bao gồm Moose từ khóa Khi lớp học đã được tạo, những từ khóa này không cần thiết. (Điều này được ưu tiên đặt no Moose ở cuối gói của bạn). "

Lấy cho Moose::Manual::BestPractices (nhấn mạnh mỏ).

Tôi hiểu tất cả mọi thứ liên quan đến việc trích dẫn ở trên, ngoại trừ một điều: tại sao là việc sử dụng các namespace::autoclean ưa thích việc sử dụng các no Moose ở phần cuối của phạm vi từ vựng?

Có phải chỉ vì namespace::autoclean là linh hoạt hơn, cho phép nhiều tùy chọn hơn trong việc sử dụng hay có nội dung nào đó được thực hiện (đặc biệt được điều chỉnh cho các lớp Moose) có thể đáng tin cậy hơn?

Tôi không tìm thấy tài liệu nào làm rõ điều này và tôi rất muốn biết câu trả lời đúng.

Trả lời

16

no Moose chỉ xóa các chức năng được nhập bởi use Moose. use namespace::autoclean loại bỏ tất cả các chức năng đã nhập.

Nếu bạn luôn sử dụng namespace::autoclean, thì bạn không phải nhớ chuyển đổi no Moose thành use namespace::autoclean nếu sau này bạn quay lại và nhập hàm từ một số mô-đun. Nếu không, bạn có thể quên làm điều đó.

+9

'không gian tên :: autoclean' cũng sẽ phá vỡ mã của bạn nếu bạn định sử dụng quá tải cùng một lúc. Trong trường hợp đó, bạn có thể thử 'namespace :: sweep'. – friedo

+1

Tài liệu hiện tại 'không gian tên :: autoclean' (v0.28, tháng 10 năm 2015) [tiểu bang] (http://stackoverflow.com/questions/9559064/why-is-use-namespaceautoclean-preferred-to-no-moose) "các ma thuật subs được cài đặt bởi quá tải sẽ không được làm sạch". –

Các vấn đề liên quan