Project

General

Profile

Actions

Bug #15457

closed

Weird behaviour when having multiple arguments of same name and splat operator

Added by graywolf (Gray Wolf) over 3 years ago. Updated over 3 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
2.5.3
[ruby-core:90690]

Description

When multiple arguments of the same name are provided and last one of
them has splat operator, everything gets weird.

+   $ cat bug.rb
def test(_a, b, *_a)
  pp _a
  pp b
end
test(*%W{a b c d e})

+   $ RUBYOPT=-rpry rvm 2.5.3 do ruby bug.rb
["c", "d", "e"]
nil

+   $ RUBYOPT=-rpry rvm 2.4.5 do ruby bug.rb
["c", "d", "e"]
nil

+   $ RUBYOPT=-rpry rvm 2.3.8 do ruby bug.rb
["c", "d", "e"]
nil

At least it's consistent across supported ruby versions, but I have no
idea what is going on.

I get why _a is %w{c d e}, that makes sense. But why is b nil?
That makes no sense at all.

It looks to me like an edge case when having multiple arguments of the same
name and one of them (last one?) having splat operator.


Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #14611: Exotic method parameters bugClosedActions
Actions #1

Updated by graywolf (Gray Wolf) over 3 years ago

  • Description updated (diff)
Actions #2

Updated by mame (Yusuke Endoh) over 3 years ago

  • Related to Bug #14611: Exotic method parameters bug added

Updated by mame (Yusuke Endoh) over 3 years ago

  • Status changed from Open to Closed

Thank you. This is duplicate of #14611. The behavior has been changed in trunk (and 2.6).

$ cat bug.rb
def test(_a, b, *_a)
  pp _a
  pp b
end
test(*%W{a b c d e})

$ ./local/bin/ruby -v bug.rb 
ruby 2.6.0dev (2018-12-24 trunk 66525) [x86_64-linux]
"a"
"b"

#14611 is marked as backport required. Please wait.

Actions

Also available in: Atom PDF