2010-09-29 7 views
11

Tôi đã có một Hash với một proc mặc định mà tôi muốn Marshal vào một tập tin, nhưng mặc định proc ngăn cản tôi làm điều đó.Hàm băm ruby ​​nguyên so với mặc định proc - loại bỏ proc mặc định?

Thay vì viết các phương pháp _dump_load của riêng mình, thay vào đó có thể xóa phương thức mặc định không? Tại thời điểm tôi đang Marshall, tôi sẽ không bao giờ cần đến proc mặc định nữa.

Trả lời

14

Chỉ cần thiết lập lại các mặc định:

h.default = nil 

một cách rõ ràng hơn:

def dumpable_hash(h) 
    return h unless h.default_proc 
    copy = h.clone 
    copy.default = nil # clear the default_proc 
    copy 
end 

Trong Ruby 2.0, bạn can cũng viết h.default_proc = nil nếu bạn thích. Có sẵn cho tất cả các loại Rubies với require 'backports/2.0.0/hash/default_proc'.

+1

Hóa ra 'h.default = nil' xóa proc mặc định - đó là tất cả những gì cần thiết. Cảm ơn! –

+0

Cũng có thể đổ băm có đối tượng giá trị mặc định, chẳng hạn như 'Hash.new (42)'. Không phải là tôi thích có các đối tượng giá trị mặc định trừ khi chúng không thay đổi. –

5

Trong trường hợp bạn muốn có một bản sao mà không mặc định, cách đơn giản nhất -

Hash[hash_with_defaults]