2014-06-17 12 views
6
đang

perl:Giá trị biến động?

my %config = (
    randValue => int(rand(10)), 
); 

print $config{ randValue }."\n"; 
print $config{ randValue }."\n"; 

sẽ sản xuất:

8 
8 

Có thể nhận được giá trị khác nhau mỗi lần? (Thực hiện int(rand(10)) mỗi lần $config{ randValue } được gọi là)

Trả lời

10

Bạn có thể sử dụng tied hash, hoặc chức năng:

my %config = (
    randValue => sub { int(rand(10)) }, 
); 

print $config{randValue}->(); 
print $config{randValue}->(); 
+4

Bạn có thể sử dụng * ma thuật * hoặc một tiểu. 'tie' chỉ là một loại phép thuật. 'sử dụng Variable :: Magic qw (wizard cast); cast ($ d10 của tôi, wizard (get => sub {$ {$ _ [0]} = int (rand (10)) + 1})); 'Tôi khuyên bạn nên sử dụng một phụ. – ikegami

+5

Tôi chỉ bật cười trong văn phòng đọc tài liệu đó: "a 'wizard", một đối tượng mờ chứa thông tin ma thuật "và" Lưu ý rằng ma thuật miễn phí không bao giờ được gọi là hủy diệt toàn cầu "cả hai trích dẫn tuyệt vời trong bất kỳ bối cảnh tưởng tượng nào và" Nếu bạn định nghĩa một trình thủ thuật với phép thuật tự do và tự tạo nó, nó sẽ dẫn đến một chu kỳ bộ nhớ, do đó destructor này sẽ không được gọi khi trình thủ thuật được giải thoát. " âm thanh như cốt truyện cho một nhiệm vụ sử thi. – DeVadder

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