Bug #2551
case/when matches literal *[1,2,3] but not variable *ary
| Status: | Closed | Start date: | 01/03/2010 | |
|---|---|---|---|---|
| Priority: | High | Due date: | ||
| Assignee: | - | % Done: | 0% |
|
| Category: | core | |||
| Target version: | Ruby 1.8.8 | |||
| ruby -v: | ruby 1.8.8dev (2010-01-01 revision 26212) [i386-darwin10.2.0] |
Description
Matching a splat works with a literal but not a variable:
$ irb188
>> case 42; when *[41..43]; true end
=> true
>> a = [41..43]
=> [41..43]
>> case 42; when *a; true end
=> nil
Behaves correctly on 1.9.2dev and 1.8.7:
$ irb192
>> RUBY_DESCRIPTION
=> "ruby 1.9.2dev (2010-01-03 trunk 26233) [x86_64-darwin10.2.0]"
>> case 42; when *[41..43]; true end
=> true
>> a = [41..43]
=> [41..43]
>> case 42; when *a; true end
=> true
This breaks a lot of code, such as the Builder library which escapes all values as '***' on 1.8.8dev.
A test case:
diff --git a/test/ruby/test_case.rb b/test/ruby/test_case.rb
index af925d1..f996ed6 100644
--- a/test/ruby/test_case.rb
+++ b/test/ruby/test_case.rb
@@ -52,5 +52,13 @@ class TestCase < Test::Unit::TestCase
else
assert(false)
end
+
+ range = [41..43]
+ case 42
+ when *range
+ assert(true)
+ else
+ assert(false)
+ end
end
end
History
Updated by Jeremy Kemper about 2 years ago
Duplicates #2468.
Updated by Jeremy Kemper about 2 years ago
This is a show-stopper bug that affects a lot of my code. If it's not going to be fixed, perhaps the 19migration/looser_args merge should be reverted.
Updated by Akinori MUSHA about 2 years ago
- Status changed from Open to Closed
This issue was solved with changeset r26589. Romulo, thank you for reporting this issue. Your contribution to Ruby is greatly appreciated. May Ruby be with you.
Updated by Jeremy Kemper about 2 years ago
r26589 adds a failing test case but no fix. Please reopen.
Updated by Marc-Andre Lafortune about 2 years ago
- Status changed from Closed to Open
Updated by Yui NARUSE almost 2 years ago
- Status changed from Open to Closed
> I wish "ref [Bug #...]" would have been parsed just like "cf: [Bug #...]". #... may change when the ticket moves from bug to backport or something. So writing ref #... is correct.