Trong Perl, khi bạn có cấu trúc dữ liệu lồng nhau, bạn có thể bỏ qua các mũi tên không tham chiếu đến 2d và nhiều cấp độ lồng nhau hơn. Nói cách khác, hai cú pháp sau đây là giống hệt nhau:Mũi tên dereferencing lồng nhau trong Perl: để bỏ qua hoặc không bỏ qua?
my $hash_ref = { 1 => [ 11, 12, 13 ], 3 => [31, 32] };
my $elem1 = $hash_ref->{1}->[1];
my $elem2 = $hash_ref->{1}[1]; # exactly the same as above
Bây giờ, câu hỏi của tôi là, là có một lý do chính đáng để lựa chọn một phong cách so với khác?
Nó có vẻ là một xương phổ biến của tranh luận phong cách (Chỉ cần trên SO, tôi vô tình va vào this và this trong không gian 5 phút).
Cho đến nay, hầu như không ai trong số các nghi phạm thông thường nói bất cứ điều gì dứt khoát:
- perldoc chỉ nói "bạn được tự do để bỏ qua con trỏ dereferencing mũi tên".
- "Thực tiễn tốt nhất Perl" của Conway nói "bất cứ khi nào có thể, dereference với mũi tên", nhưng nó dường như chỉ áp dụng cho bối cảnh dereferencing tham chiếu chính, chứ không phải mũi tên tùy chọn trên mức 2d của cấu trúc dữ liệu lồng nhau.
"Mastering Perl cho Bioinfirmatics" tác giả James Tisdall không dành ưu tiên rất rắn hoặc:
"Người đọc bén nhạy có thể có nhận thấy rằng chúng ta dường như được bỏ qua khai thác mũi tên giữa mảng (Sau khi tất cả, đây là mảng vô danh của mảng ẩn danh của mảng ẩn danh, v.v., do đó, không được viết [$ array -> [$ i] -> [$ j] -> [$ k]?) Perl cho phép điều này, chỉ có toán tử mũi tên giữa tên biến và yêu cầu chỉ số mảng đầu tiên. Nó làm cho mọi thứ dễ dàng hơn trên mắt và giúp tránh hội chứng ống cổ tay. Mặt khác, trên , bạn có thể muốn giữ các mũi tên dereferencing tại chỗ, để làm rõ rằng bạn đang xử lý các tham chiếu . sự lựa chọn của bạn."
CẬP NHẬT "Intermediate Perl", theo đồng tác giả của nó brian d Foy, khuyên bạn bỏ qua các mũi tên. Xem câu trả lời đầy đủ brian của bên dưới.
Cá nhân, tôi ở bên cạnh "luôn đặt mũi tên vào, vì nó dễ đọc hơn và rõ ràng chúng đang đối phó với một tham chiếu".
CẬP NHẬT Để cụ thể hơn: khả năng đọc lại, trong trường hợp biểu thức đa lồng nhau ở đâu e subscript chính là biểu thức, các mũi tên giúp "biểu thị trực quan" các biểu thức bằng cách rõ ràng hơn là tách các bảng con khỏi nhau.
brian - hệ thống không cho tôi biết bạn đã cập nhật câu trả lời, xin lỗi vì đã chú ý muộn. – DVK