Theo nàyTại sao tôi không nên sử dụng UNIVERSAL :: isa?
http://perldoc.perl.org/UNIVERSAL.html
tôi không nên sử dụng UNIVERSAL :: isa() và thay vào đó nên sử dụng $ obj-> isa() hoặc CLASS-> isa().
này có nghĩa là để tìm hiểu xem cái gì đó là một tài liệu tham khảo ở nơi đầu tiên và sau đó là tham chiếu đến lớp học này tôi phải làm
eval { $poss->isa("Class") }
và kiểm tra $ @ và tất cả những gì gumph, nếu không
use Scalar::Util 'blessed';
blessed $ref && $ref->isa($class);
Câu hỏi của tôi là lý do tại sao? Có gì sai với UNIVERSAL :: isa được gọi là như vậy? Nó sạch hơn nhiều cho những việc như:
my $self = shift if UNIVERSAL::isa($_[0], __PACKAGE__)
Để xem chức năng này có được gọi trên vật thể hay không. Và có một thay thế sạch đẹp mà không nhận được cồng kềnh với ampersands và dòng dài tiềm năng?
UNIVERSAL :: isa KHÔNG yêu cầu tham chiếu may mắn. Nó hoạt động tuyệt vời trên các tham chiếu không có giá trị (ví dụ: UNIVERSAL :: isa ([7], 'ARRAY') trả về 1). Như đã giải thích trong tài liệu, nếu bạn chuyển nó thành một chuỗi, nó coi nó như một tên lớp (như được minh họa bởi ví dụ của bạn). – cjm
@cjm: Bạn nói đúng, tôi nên làm rõ điều đó. –
Tất nhiên, có một thời gian khi [bạn thực sự muốn vấn đề thứ hai] (http://www.perlmonks.org/?node_id=576091) ... nhưng bạn phải cẩn thận với những hạn chế khác, nếu đó là những gì bạn đang cố gắng làm. – Joe