Đây là chính xác hành vi mà bạn mong đợi để xem.
Bạn không bao giờ thêm bất kỳ thứ gì vào số Hash
, do đó, Hash
hoàn toàn trống. Khi bạn tra cứu một khóa, khóa đó sẽ không bao giờ tồn tại, do đó nó trả về giá trị mặc định, mà bạn đã chỉ định là một Array
.
Vì vậy, bạn tra cứu khóa 'a'
, không tồn tại và do đó trả về giá trị mặc định là Array
. Sau đó, bạn gọi số <<
trên số đó Array
, gắn thêm một giá trị (1
) vào đó.
Tiếp theo, bạn tra khóa 'b'
, cũng không tồn tại, và do đó trả về Array
bạn đã chỉ định làm giá trị mặc định, hiện chứa phần tử 1
mà bạn đã thêm trước đó. Sau đó, bạn gọi số <<
trên số đó Array
, thêm giá trị 2
vào đó.
Bạn kết thúc bằng số Hash
vẫn còn trống, vì bạn chưa bao giờ thêm bất kỳ thứ gì vào đó. Giá trị mặc định của Hash
hiện là một mảng chứa các giá trị 1
và 2
.
Kết quả bạn thấy là bởi vì IRB luôn in kết quả của biểu thức cuối cùng được đánh giá. Biểu thức cuối cùng trong ví dụ của bạn là gọi <<
trên Array
. <<
trả về bộ thu, sau đó là giá trị trả về của toàn bộ biểu thức và do đó IRB in ra.
Nguồn
2011-03-30 16:25:24
Bạn có chắc chắn về kết quả bạn đang xem không? Hoặc những gì Hash thực sự chứa? Không rõ bạn đang tìm gì ở đây. – jmccarthy