From: josh.cheek@... Date: 2015-03-23T10:25:22+00:00 Subject: [ruby-core:68610] [Ruby trunk - Bug #10996] [Open] Inline if statements should hoist variables. Issue #10996 has been reported by Josh Cheek. ---------------------------------------- Bug #10996: Inline if statements should hoist variables. https://bugs.ruby-lang.org/issues/10996 * Author: Josh Cheek * Status: Open * Priority: Normal * Assignee: * ruby -v: ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13.0] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- A multiline if statement hoists local variables to the parent scope. An inline if statement does not. We can see that in this first example, the `a` declared in the conditional is available both in the body and in the parent, after the if-statement is executed. ~~~ruby if a = 'A' a # => "A" end a # => "A" ~~~ However, when refactoring to an inline-if-statement, the variable is no longer available. ~~~ruby a if a = 'A' # ~> NameError: undefined local variable or method `a' for main:Object # ~> NameError # ~> undefined local variable or method `a' for main:Object # ~> # ~> /var/folders/7g/mbft22555w3_2nqs_h1kbglw0000gn/T/seeing_is_believing_temp_dir20150323-47886-ay5rau/program.rb:1:in `
' ~~~ Inline if statements should hoist variables, too. For both consistency and convenience. -- https://bugs.ruby-lang.org/