15
Đây là một đoạn trích từ AnyEvent::Intro
Tại sao một người chọn khai báo và khởi tạo biến từ vựng trong các câu lệnh riêng biệt?
# register a read watcher
my $read_watcher; $read_watcher = AnyEvent->io (
fh => $fh,
poll => "r",
cb => sub {
my $len = sysread $fh, $response, 1024, length $response;
if ($len <= 0) {
# we are done, or an error occurred, lets ignore the latter
undef $read_watcher; # no longer interested
$cv->send ($response); # send results
}
},
);
Tại sao nó sử dụng
my $read_watcher; $read_watcher = AnyEvent->io (...
thay vì
my $read_watcher = AnyEvent->io (...
?
afaik có sự khác biệt; có thể chỉ là phong cách – ShinTakezou
ShinTakezou: bạn đã thử nó chưa? với nghiêm ngặt? Việc ném 'Biểu tượng toàn cục' $ read_watcher "yêu cầu tên gói rõ ràng 'trong phần sau là sự khác biệt khá lớn. Ngay cả khi không nghiêm ngặt, $ read_watcher từ vựng sẽ là một biến khác với gói scoped $ read_watcher bên trong coderef. – MkV
Từ AnyEvent :: Giới thiệu: Lý do cho điều này là một điều không minh bạch trong cách thức hoạt động của Perl: tên biến được khai báo với "của tôi" chỉ hiển thị trong câu lệnh tiếp theo. Nếu toàn bộ cuộc gọi "AnyEvent-> io", bao gồm cả gọi lại, sẽ được thực hiện trong một câu lệnh duy nhất, hàm gọi lại không thể tham chiếu biến $ read_watcher để "undef" ine nó, do đó, nó được thực hiện trong hai câu lệnh. – MkV