Bug #8920

Exception when using a variable defined in end-of-line if statement

Added by Joe Fredette 7 months ago. Updated 7 months ago.

[ruby-core:57257]
Status:Rejected
Priority:Normal
Assignee:-
Category:-
Target version:-
ruby -v:ruby 2.0.0p247 Backport:1.9.3: UNKNOWN, 2.0.0: UNKNOWN

Description

=begin
The following code raises an exception on each MRI version (exact ((%ruby -v%)) output attached at the end of this post):

class Test
def foo
puts "No Exception!"
end
end

begin
t.foo if t = Test.new
rescue Exception => e
STDERR.puts "Exception raised! ``#{e.class}: #{e}''"
exit 1
end

exit 0

The exception raised is:

NameError: undefined local variable or method `t' for main:Object

The output I expected was "No Exception."

This script was run on the following system:

$ rvm --version
#=> rvm 1.21.17 (stable) by Wayne E. Seguin wayneeseguin@gmail.com, Michal Papis mpapis@gmail.com [[https://rvm.io/]]

$ uname -a
#=> Darwin JGF.local 12.4.0 Darwin Kernel Version 12.4.0: Wed May 1 17:57:12 PDT 2013; root:xnu-2050.24.15~1/RELEASEX8664 x86_64 i386 MacBookPro8,2 Darwin

(For reference, this is a mid-2011 Macbook Pro)

and raises the unexpected exception on the following ruby versions:

ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]
ruby 1.9.3p448 (2013-06-27 revision 41675) [x8664-darwin12.3.0]
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86
64-darwin12.3.0]

It also appears to raise in JRuby, but not in Rubinius, though that may or may not be relevant for this bugtracker.

Please let me know if I need to provide any other details. I put 2.0.0 in the ((%ruby -v%)) field, but it is reproducible on each of the MRI versions I listed above.

=end

History

#1 Updated by Charlie Somerville 7 months ago

  • Status changed from Open to Rejected

This is intended behaviour. Variables are defined in order of their appearance in the source.

I believe matz has rejected making variables defined in the condition of a postfix if before, saying he didn't want to introduce inconsistent behaviour just for this.

#2 Updated by Nobuyoshi Nakada 7 months ago

  • Description updated (diff)

#3 Updated by Joe Fredette 7 months ago

-- accidental doublepost --

#4 Updated by Joe Fredette 7 months ago

Excellent, thanks charliesome for the fast response, and nobu for fixing my formatting. I'll report back to the rubinius project that this is, indeed, inconsistent behavior.

Also available in: Atom PDF