Project

General

Profile

Actions

Bug #10314

closed

Default argument lookup fails in Ruby 2.2 for circular shadowed variable names

Added by lsegal (Loren Segal) about 10 years ago. Updated about 5 years ago.

Status:
Closed
Target version:
-
ruby -v:
2.2.0-preview1
[ruby-core:65356]

Description

The following code prints nil in Ruby 2.2.0-preview1 but worked in all previous version of Ruby back to 1.8.7:

class Foo
  def foo; "abc" end
 
  # this default param should resolve at runtime to the #foo method call
  def run(foo = foo)
    p foo # print shadowed local var defaulting to attr value
  end
end
 
puts "Testing #{RUBY_VERSION}:"
Foo.new.run

# Ruby 2.2.0-preview1
# => nil

# Ruby 1.x 2.x etc
# => "abc"

My guess is this is happening because "foo" in "foo = foo" is resolving to the argument variable "foo", which currently has the value of nil. It would be equivalent to setting "qux = qux" in a method body, which has been the expected behavior for a long time.

I understand that shadowing variables is something you should probably never do, but unfortunately this code was already written and working for quite a while, so I figured it would be wise to file a bug report for the following reasons:

  1. This seems like a breaking change in Ruby 2.2.0-preview1 that was not announced in the changelog. My guess is this change may have been unintentional, but if it was we need a changelog entry at the very least.
  2. If this is newly expected behavior, I wanted to chime in that I don't think it makes much sense. I can't think of any time when a user would expect the default value of a "foo = foo" argument to be the same foo argument itself. That would be tautologically nil. Arguably, it doesn't make much sense inside of a method body either when there is a shadowed method that could be called instead.

Files

circular-arg-ref-syntax-error-10314.patch (3.82 KB) circular-arg-ref-syntax-error-10314.patch jeremyevans0 (Jeremy Evans), 08/11/2019 11:26 PM

Related issues 2 (0 open2 closed)

Related to Ruby master - Bug #9593: Keyword arguments default argument assignment behaviour not consistent with optional argumentClosedmatz (Yukihiro Matsumoto)03/05/2014Actions
Related to Ruby master - Bug #10280: Regression while evaluating default argments of a methodRejected09/22/2014Actions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0