Hash.new(0) and the block form of Hash.new{smart_stuff} come in
really handy while reading in a hash.
When the reading is done however, my hash serves to provide data. At
that stage, the default_value behaviour gets in the way. For instance,
if the hash contains the number of goals for soccerplayers, I don’t want
the hash to return value “0” for the key “Wolfgang Amadeus Mozart”; by
then I want plain old Nil, or “No data available”.
failed experiment:
Class Hash
def default_proc
Nil
end
end
How can Hash.new behaviour be changed?
regards,
Siep
Siep K. [email protected] wrote:
Class Hash
def default_proc
Nil
end
end
How can Hash.new behaviour be changed?
regards,
Siep
h = Hash.new.merge(h)
So for example:
h = Hash.new(0)
h[:a] += 2
h[:a] += 1
h[:b] += 4
p h #=> {:a=>3, :b=>4}
h = Hash.new.merge(h)
p h[:c] #=> nil, it’s now returning plain old nil
m.
Siep K. wrote:
Hash.new(0) and the block form of Hash.new{smart_stuff} come in
really handy while reading in a hash.
When the reading is done however, my hash serves to provide data. At
that stage, the default_value behaviour gets in the way. For instance,
if the hash contains the number of goals for soccerplayers, I don’t want
the hash to return value “0” for the key “Wolfgang Amadeus Mozart”; by
then I want plain old Nil, or “No data available”.
failed experiment:
Class Hash
def default_proc
Nil
end
end
How can Hash.new behaviour be changed?
regards,
Siep
a = Hash.new(0)
do something with a
a = Hash.new { |h,k| h[k] = “No data available” }.merge(a)
But I don’t know if this is what you want.
Bye.
Andrea
Craig D. wrote:
Reset the default.
a = Hash.new(0)
=> {}
a[“joe”]
=> 0
a.default = nil
=> nil
a[“joe”]
=> nil
Regards,
Craig
Thanks all. When i’m stuck, the solution is almost always easier then I
imagined.
Regards,
Siep