Issue #14785 has been updated by nobu (Nobuyoshi Nakada).


```ruby
def test
  result = calculate_result and return result
  # ...
end
```


----------------------------------------
Feature #14785: Parse guard statements like regular conditionals
https://bugs.ruby-lang.org/issues/14785#change-72248

* Author: jacobevelyn (Jacob Evelyn)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
I just learned that these two pieces of code are not the same:

~~~ ruby
def test
  if result = calculate_result
    return result
  end

  ...
end
~~~

~~~ ruby
def test
  return result if result = calculate_result

  ...
end
~~~

The second one will give this unhelpful error message:

~~~
NameError: undefined local variable or method `result' for main:Object
Did you mean?  result
~~~

I think this is confusing, especially since tools like RuboCop sometimes encourage users to change conditionals to inline ones ("guard statements"). I'd like to propose that Ruby be changed to treat these as the same.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>