How to re-replace Hash default value behaviour?

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.

Reset the default.

a = Hash.new(0)
=> {}

a[“joe”]
=> 0

a.default = nil
=> nil

a[“joe”]
=> nil

Regards,
Craig

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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs