Hash#collect! #
It’s always bugged me that Hash#collect
returns an Array. And Hash#collect!
simply gags and kicks a leg. It’s another situation where we’re lacking a really smashing RCR. We’ve had Hash#collect_to_hash and Enumerable#make_hash—the latter being more favorable, right??
Gavin Sinclair’s build_hash
(from extensions) is a newer version of make_hash
. Like collect
and map
, but designed to return a Hash
. Is there anything wrong with using build_hash
as Hash’s own special collect
?
module Enumerable def build_hash result = {} self.each do |elt| key, value = yield elt result[key] = value end result end end class Hash alias collect build_hash end
And I’m also going to throw in Hash#collect!
for your money. This method should be!! And, for the first time in years, I’m citing PoLS. I say we each get a “Go Directly To PoLS” card every age.modulo(7).zero?
.
class Hash def collect!( &blk ) self.replace( build_hash( &blk ) ) end alias map! collect! end
nonono
POLS is matz’ winning card. He’s the only one who can use it.
PS: alias_method plz, alias is ugly
k
Array#collect also works without a block, it would be nice if Hash#collect did the same:
hash = {‘a’=>1}; puts hash.collect.inspect
trans
Do you really feel it wise to change #collect for Hash? I sympothize, but I have a feeling backward compatability issues will never allow it. Nontheless I will make it an option in Ruby Facets.
trans
I have:
trans
Oh, one last thing. Did you intend to alias #map too? Or did you leave that out for a reason?
Comments are closed for this entry.