I have a question regarding the and/&&/= keywords in Ruby.
The ruby docs say that the precedence for the mentioned keywords is: (1)&&, (2)=, (3)and.
I have this snippet of code I wrote:
def f(n)
n
end
if a = f(2) and b = f(4) then
puts "1) #{a} #{b}"
end
if a = f(2) && b = f(4) then
puts "2) #{a} #{b}"
end
The output is:
1) 2 4 [Expected]
2) 4 4 [Why?]
For some reason using the && causes both a and b to evaluate to 4?
I don't quite understand the question you are asking. I mean, you have already given the answer yourself, before even asking the question:
&&
binds tighter than=
whileand
binds less tightly than=
.So, in the first case, the expression is evaluated as follows:
In the second case, the evaluation is as follows: