2009-05-18 30 views

Trả lời

47

base cố gắng thực hiện quá nhiều thứ — tự động xử lý mô-đun tải nhưng cũng cho phép thiết lập kế thừa từ lớp đã tải (có thể từ tệp có tên không dựa trên tên mô-đun). Để làm cho nó hoạt động, có một số hackery gây ra kết quả đáng ngạc nhiên trong một số trường hợp. Thay vì phá vỡ tính tương thích ngược, một pragma thay thế mới, parent được giới thiệu với ngữ nghĩa sạch hơn.

parent sẽ là mô-đun chính kể từ 5.10.1.

Cập nhật: quên rằng base xử lý fields (nếu bạn đang sử dụng fields pragma), mà parent không làm.

+21

Ngoài ra, so sánh perl-wE'say yêu cầu cơ sở 'để perl-wE'say yêu cầu cha mẹ' – ysth

34

lượng vũ trang với các bit thêm thông tin từ ysth, tôi đã có thể thấy sự khác biệt trong các tài liệu:

Các base pragma không những điều sau đây:

  • thêm gói tên để @ISA
  • tải mô-đun có cùng tên với gói được đặt tên bằng cách sử dụng require (trừ khi phát hiện gói đã được tải)
  • sẽ không thành công nếu mô-đun có thứ e cùng tên như các gói không tồn tại
  • chết nếu không có các biểu tượng trong các gói có tên
  • nếu $VERSION không tồn tại trong gói được đặt tên, cơ sở đặt nó để "-1, set by base.pm"
  • khởi tạo fields của gói tên nếu chúng tồn tại
  • không gọi hàm nhập khẩu của gói tên

các parent pragma thực hiện những điều sau đây:

  • thêm gói tên để @ISA
  • tải các module với tên tương tự như gói tên sử dụng require
  • chấp nhận một tùy chọn mà nói nó không chết nếu một module với tên tương tự như gói doesn' t tồn tại
+4

Hầu như. Tùy chọn norequire chỉ yêu cầu nó không làm các yêu cầu (vì vậy lớp đó phải được nạp). Điều này có nghĩa là nó không phải bẫy lỗi và quyết định xem chúng có nên bị chặn hay không. – ysth

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