2010-08-01 33 views
35

Hãy nói rằng chúng ta định nghĩa một băm vô danh như thế này:Làm thế nào để xóa một băm Perl

my $hash = {}; 

Và sau đó sử dụng băm sau đó. Sau đó là lúc để trống hoặc xóa băm để sử dụng lại . Sau khi một số tìm kiếm của Google, tôi thấy:

%{$hash} =() 

và:

undef %{$hash} 

Cả hai sẽ phục vụ nhu cầu của tôi. Sự khác nhau giữa hai cái là gì? Có phải cả hai cách đều giống nhau để làm trống một băm?

Trả lời

23

Có, chúng hoàn toàn giống nhau. Cả hai loại bỏ bất kỳ khóa và giá trị hiện có nào từ bảng và đặt hàm băm vào danh sách trống.

Xem perldoc -f undef:

undef expr
undef     Undefines giá trị của EXPR, mà cần phải có một giá trị trái. Chỉ sử dụng trên giá trị vô hướng, một mảng (sử dụng "@"), một hàm băm (sử dụng "%"), một chương trình con (sử dụng "&") hoặc typeglob (sử dụng "*") ...
Ví dụ:

   undef $foo; 
       undef $bar{'blurfl'};  # Compare to: delete $bar{'blurfl'}; 
       undef @ary; 
       undef %hash; 

Tuy nhiên, bạn không nên sử dụng undef để loại bỏ các giá trị của bất cứ điều gì ngoại trừ một đại lượng vô hướng. Đối với các loại biến khác, hãy đặt nó thành phiên bản "trống" của loại đó - ví dụ: đối với mảng hoặc băm, @foo =(); %bar =();

+21

Chúng gần như giống hệt nhau. sau khi undef, được định nghĩa sẽ trả về false, sau khi =(), được định nghĩa là vẫn đúng. – rurban

+0

Tôi nghĩ rằng phản đối của rurban đối với câu trả lời này là khá quan trọng. Có lẽ Ether có thể cập nhật câu trả lời của mình để đề cập đến sự khác biệt đó? – antred

+3

Việc sử dụng định nghĩa (% băm) không được chấp nhận và không được sử dụng. Vì vậy, phản đối của rurban cuối cùng có thể là tranh luận. Từ các tài liệu perl cho "đã xác định": "Việc sử dụng xác định trên tổng hợp (băm và mảng) không được dùng nữa. Nó được sử dụng để báo cáo liệu bộ nhớ cho tổng hợp đó có được phân bổ hay không. Hành vi này có thể biến mất trong các phiên bản tương lai của Perl". – PhilHarvey

29

%$hash_ref =(); có ý nghĩa hơn là băm băm. Undef-ing băm nói rằng bạn đang thực hiện với băm. Chỉ định một danh sách trống cho biết bạn chỉ muốn một băm rỗng.

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