C
cremes.devlist
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.
[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.