I have a new question regarding _why’s post [1].
[1] http://redhanded.hobix.com/bits/wonderOfTheWhenBeFlat.html
In the comments he explains that */asterisk is now being used as a
replacement for the method #to_a. But I don’t see how that’s true.
Let’s look at an example.
irb(main):001:0> @r1 = (0…10)
=> 0…10
irb(main):002:0> @r2 = (11…20)
=> 11…20
irb(main):003:0> def foo a
irb(main):004:1> case a
irb(main):005:2> when @r1
irb(main):006:2> puts “#{a} in range r1”
irb(main):007:2> when @r2.to_a
irb(main):008:2> puts “#{a} in range r2”
irb(main):009:2> else
irb(main):010:2 puts “#{a} NOT in any defined range”
irb(main):011:2> end
irb(main):012:1> end
=> nil
irb(main):013:0> foo 3
3 in range r1
=> nil
irb(main):014:0> foo 12
12 NOT in any defined range
=> nil
If * is really equivalent to #to_a in this case, then the second
“when” test should succeed when passed argument 12, right? As can be
seen from the output, it triggers the else clause.
I looked up * in the 2nd Ed PickAxe and it doesn’t cover this
functionality at all. It talks about * being used in patterns and in
coalescing method argument lists.