From: merch-redmine@... Date: 2018-05-24T14:12:30+00:00 Subject: [ruby-core:87255] [Ruby trunk Feature#14785] Parse guard statements like regular conditionals Issue #14785 has been updated by jeremyevans0 (Jeremy Evans). jacobevelyn (Jacob Evelyn) wrote: > I agree the `did_you_mean` message is not good, but I would rather change the behavior so that line of code works and doesn't produce an error at all. Doing that would change the behavior of code that currently works: ~~~ ruby def calculate_result :calculate_result end def result :result end def test return result if result = calculate_result :test end ~~~ Currently, `test` returns `:result`. With the change you are proposing, `test` would return `:calculate_result`. ---------------------------------------- Feature #14785: Parse guard statements like regular conditionals https://bugs.ruby-lang.org/issues/14785#change-72245 * 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: