Đây là một thủ thuật thông minh cho phép băm autovivification trong ruby (lấy từ khía cạnh):ruby băm autovivification (khía cạnh)
# File lib/core/facets/hash/autonew.rb, line 19
def self.autonew(*args)
leet = lambda { |hsh, key| hsh[key] = new(&leet) }
new(*args,&leet)
end
Mặc dù nó hoạt động (tất nhiên), tôi thấy nó thực sự bực bội mà tôi có thể' t tìm hiểu làm thế nào hai lớp lót này làm những gì nó làm.
Leet được đặt làm giá trị mặc định. Vì vậy, khi đó, chỉ cần truy cập h['new_key']
bằng cách nào đó sẽ hiển thị và tạo ra 'new_key' => {}
Bây giờ, tôi mong đợi trả về giá trị mặc định của đối tượng mặc định thay vì đánh giá nó. Tức là, 'new_key' => {}
không được tạo tự động. Vì vậy, làm thế nào để thực sự gọi là leet? Đặc biệt với hai thông số?
Câu trả lời hay. – Pesto
Thật vậy. Điều này, đặc biệt, sẽ dạy tôi không bao giờ nhắc đến RubyBook (đi kèm với bản phân phối cửa sổ ruby chuẩn), vì nó không đề cập đến thực tế nhỏ bé liên quan đến các khối và mới. – artemave