[#23231] What do you think about changing the return value of Kernel#require and Kernel#load to the source encoding of the required file? — =?ISO-8859-15?Q?Wolfgang_N=E1dasi-Donner?= <ed.odanow@...>

Dear Ruby developers and users!

8 messages 2009/04/17

[#23318] [Feature #1408] 0.1.to_r not equal to (1/10) — Heesob Park <redmine@...>

Feature #1408: 0.1.to_r not equal to (1/10)

19 messages 2009/04/26

[ruby-core:23277] Re: [Feature #666](Rejected) Enumerable::to_hash

From: Marc-Andre Lafortune <ruby-core-mailing-list@...>
Date: 2009-04-21 20:45:06 UTC
List: ruby-core #23277
Thank you for your response

On Mon, Apr 20, 2009 at 2:13 PM, Yukihiro Matsumoto <matz@ruby-lang.org> wr=
ote:
> For that reason, a method for assoc_to_hash operation might be more
> appropriate. =A0But I still have doubt.

Let me attempt to dissolve (some of) your doubts. I checked rapidly
rails' code. I found over 40 "inject({})" and looking at them reveals
that most could be improved using #to_hash.

For example, the first ones I found could be rewritten as follows:

# part_container.rb
attrs =3D attrs.inject({}) { |h,s| k,v =3D s.split(/=3D/, 2); h[k] =3D v; h=
 }
# =3D=3D>
attrs =3D attrs.map{ |s| s.split(/=3D/, 2) }.to_hash


# route_set.rb (meta programming)
args =3D args.zip(#{route.segment_keys.inspect}).inject({}) do |h, (v, k)|
  h[k] =3D v
  h
end
# =3D=3D>
args =3D args.zip(#{route.segment_keys.inspect}).to_hash


# route_set.rb
recall.inject({}) do |expiry, (key, recalled_value)|
  expiry[key] =3D (options.key?(key) && options[key].to_param !=3D
recalled_value.to_param)
  expiry
end
# =3D=3D>
recall.to_hash do |key, recalled_value|
  [key, (options.key?(key) && options[key].to_param !=3D recalled_value.to_=
param)]
end

# etc...

These are easy to find but are not the only instances that could be
improved, of course. Here's another example I found:

# routes.rb
@parameter_shell ||=3D returning({}) do |shell|
  requirements.each do |key, requirement|
    shell[key] =3D requirement unless requirement.is_a? Regexp
  end
end
# =3D=3D>
@parameter_shell ||=3D requirements.reject{|key, requirement|
requirement.is_a? Regexp}.to_hash

I believe the latter form is not only more concise but much more expressive=
.

My final comment would be that although 40 inject({}), a couple of
returning({}) and other places I don't know of in the whole of rails'
code is not that much. Just for comparision's sake, there are only 2
uses of #assoc, 0 of #rassoc, 1 of #partition, 3 of #grep, etc... So I
believe that #to_hash would be reasonably useful.

Thank you,

Marc-Andr=E9

In This Thread