From: "marcandre (Marc-Andre Lafortune)" Date: 2013-09-01T04:05:04+09:00 Subject: [ruby-core:56946] [ruby-trunk - Feature #7292][Open] Enumerable#to_h Issue #7292 has been updated by marcandre (Marc-Andre Lafortune). Status changed from Feedback to Open Priority changed from Low to Normal matz (Yukihiro Matsumoto) wrote: > What I wanted was coner case behavior of #to_h, e.g. what if elements are not 2 elements arrays. > What kind of checks do you want to do? > > The simplest implementation in #6 may work, but I'm not sure whether kind of accidental behavior definition is suffice. I think it might be best to ignore anything that is not a key-value pair. So we should use an implementation slightly different from #6. In Ruby: module Enumerable def to_h h = {} each_entry do |ary| next unless ary.respond_to?(:to_ary) ary = ary.to_ary raise TypeError unless ary.is_a?(Array) next unless ary.size == 2 h[e.first] = e.last end h end end Note that I am using `each_entry`, so `yield(:key, :value)` is treated the same as `yield([:key, :value])`. ---------------------------------------- Feature #7292: Enumerable#to_h https://bugs.ruby-lang.org/issues/7292#change-41505 Author: marcandre (Marc-Andre Lafortune) Status: Open Priority: Normal Assignee: matz (Yukihiro Matsumoto) Category: core Target version: next minor Now that #to_h is the official method for explicit conversion to Hash, we should also add Enumerable#to_h: Returns a hash for the yielded key-value pairs. [[:name, 'Joe Smith'], [:age, 42]].to_h # => {name: 'Joe Smith', age: 42} With the Ruby tradition of succint documentation I suggest the documentation talk about key-value pairs and there is no need to be explicit about the uninteresting cases like: (1..3).to_h # => {1 => nil, 2 => nil, 3 => nil} [[1, 2], [1, 3]].to_h # => {1 => 3} [[1, 2], []].to_h # => {1 => 2, nil => nil} I see some reactions of people reading about the upcoming 2.0 release like this one: http://globaldev.co.uk/2012/11/ruby-2-0-0-preview-features/#dsq-comment-body-700242476 -- http://bugs.ruby-lang.org/