Actions
Bug #15880
closedWrong precedence of the if modifier in pattern matching
Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 2.7.0dev (2019-05-20 trunk ab0f2deab1) [x86_64-darwin18]
Description
When "If" is used as an "If modifier" it runs before the expression that it wraps:
=> puts 1 if (puts 2; true)
2
1
However, when it's used in the pattern matching destructuring runs first:
class A
def deconstruct
puts 'deconstruct called'
[1]
end
end
p case A.new
in A[1] if (puts 'if check'; true)
'yes'
else
'no'
end
# prints
# deconstruct called
# if check
# "yes"
I personally think that it's very confusing as it doesn't reflect the code. I assumed it to not run destructuring if the check returns false
(especially because destructuring is allowed to have side-effects)
Actions
Like0
Like0Like0