On Mon, Jun 25, 2012 at 9:57 PM, Intransition <[email protected]> wrote:
>> On Monday, June 25, 2012 12:00:01 PM UTC-4, Robert Klemme wrote:
>>>
>>> And what's the use case for *that* method?
>
>
> To convert an Enumerable to a Hash. Sorry, I should have specified that.
But not only that: you need a Hash as input to do transformations
along the way. Wouldn't this be more reasonable if you just want to
convert to a Hash?
def to_hash
{}.tap do |h|
each_slice 2 do |k, v|
k, v = yield k, v if block_given?
h[k] = v
end
end
end
>>> > def h(init={})
>>> > h = init
>>>
>>> You never assign h nor init so you could completely get rid of h.
>
>
> ??? What about `h[k] = v`, or am I misunderstanding?
Yes. There is just one assignment to h.
>>> I find it strange that you yield h[k] and not k. The caller can never
>>> know what k was, while if you pass k he can look up in init and obtain
>>> the value you now yield.
>
> The idea behind that is to allow Symbol#to_proc to be useful.
>
> a = [:a, 1, :b, 2, :a, 3]
>
> i = Hash.new{ |h,k| h[k] = [] }
> a.h(i, &:+) #=> {:a=>[1,3], :b=>[2]}
irb(main):029:0> i = Hash.new{ |h,k| h[k] = [] }
=> {}
irb(main):030:0> a.each_slice(2){|k,v| i[k] << v}
=> nil
irb(main):031:0> i
=> {:a=>[1, 3], :b=>[2]}
> I considered other interfaces to the block but this one seemed like it would
> be the most useful b/c of this.
>
>>> It's totally mysterious what you are after here. The fact that you do
>>> not have a name yet might be indicative that this methods are probably
>>> not such a good idea. They do not look generally useful to me.
>
>
> No, that's me simply not giving enough initial context, which sometimes I
> do so not to skew others consideration. But not very helpful in the case,
> clearly.
I agree with Bartosz, there is a lot of magic in there and the method
does more than one thing which is always suspicious. If you want to
do a transformation a la #map along the way I would leave that
completely to a block passed and not restrict it to a Hash (well, a
Proc might work as well - but still).
Kind regards
robert
--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/
-- You received this message because you are subscribed to the Google Groups
ruby-talk-google group. To post to this group, send email to
[email protected]. To unsubscribe from this group, send email
to [email protected]. For more options, visit this
group at https://groups.google.com/d/forum/ruby-talk-google?hl=en