On Mon, Mar 25, 2013 at 5:04 PM, Robert Klemme
<shortcutter / googlemail.com> wrote:
> On Mon, Mar 25, 2013 at 7:55 PM, tamouse mailing lists <tamouse.lists / gmail.com> wrote:
>> Since otherwise I'd be hijacking, I'm starting a new thread on this:
>>
>> On Mon, Mar 25, 2013 at 6:52 AM, Robert Klemme <shortcutter / googlemail.com> wrote:
>>> On Mon, Mar 25, 2013 at 9:40 AM, Hans Mackowiak <lists / ruby-forum.com> wrote:
>>>> how about this?
>>>>
>>>> puts "How many players?"
>>>> players = Array.new(gets.to_i) do |n|
>>>>   puts "Name of player #{n+1}?"
>>>>   Player.new(gets.chomp)
>>>> end
>>>
>>> I'd rather use #times with #map:
>>>
>>> players = Integer(gets).times.map do |i|
>>>     puts "Name of player #{n+1}?"
>>>     Player.new(gets.chomp)
>>>   end
>
> I just notice, there is a typo in the name prompt.  Should have been
>
> puts "Name of player #{i+1}?"
>
>> Could you say why, Robert? Obviously there's more than one way to do
>> something, but I am interested in why you'd choose this way?
>
> Oh, it's probably rather a matter of taste.  When the "automatic"
> to_enum was introduced for block methods which were called without a
> block I took on the habit of using that feature since I find it
> elegant.  There's absolutely nothing wrong with your solution.  In
> fact, it might be a more efficient.
>
> I'd just point out that using Integer() is more robust than
> String#to_i because it will ensure the argument *is* actually a String
> representing an integer.

That is interesting -- I will probably try that more often.

>> I don't very much like the previous Array.new() {} either, although
>> being 1-based might be easier for some to understand, but breaks my
>> oh-so-long-established zero-based array mentality. I'd have approached
>> this with #reduce. I'd appreciate hearing your thoughts on the
>> trade-offs.
>
> Which previous Array.new {} do you mean?  The one with the separate
> counter variable?

In this case, it was in the solution proposed by Hans, one message up
from yours.

> I don't think this calls for #inject / #reduce.  IMHO #map is a better
> choice here since you do not need to explicitly deal with the Array
> copied into.

Very good point. I may have started thinking of #reduce as a big
hammer that can be used everywhere. :)

Thank you!