I found the following statement in routing.rb of rails framework. I
haven't seen this kind of usage anywhere. Can somebody tell me what
does this statement do? I am particularly interested in knowing how
'and' behaves here.
result = route.recognize(path, environment) and return result
Thanks
-subbu
If /result/ is not /nil/ and not /false/ it will be returned here.
Otherwise control flow proceeds to the next line. Try it out in IRB
irb(main):001:0> def t(x) x and return x; 'not_returned' end
=> nil
irb(main):002:0> t 1
=> 1
irb(main):003:0> t 2
=> 2
irb(main):004:0> t false
=> "not_returned"
irb(main):005:0> t nil
=> "not_returned"
irb(main):006:0> t true
=> true
irb(main):007:0>
Kind regards
robert
--
use.inject do |as, often| as.you_can - without end
result = true and true
puts result
result = false and false
puts result
puts
x = 10
result = false and x = 20
puts result
puts x
result = true and x = 20
puts result
puts x
--output:--
true
false
false
10
true
20
The results are due to 'short circuiting' of the conditionals. If you
have this statement:
x and y
and x is false, then there is no way for the whole conditional to
evaluate to true. As a result, there is no need to evaluate the second
expression y to determine the result of the conditional--its going to be
false no matter what y evaluates to, and ruby chooses not to evaluate y.
The statement:
result = route.recognize(path, environment) and return result
is equivalent to:
result = route.recognize(path, environment)
if result
return result
end
--
Posted via http://www.ruby-forum.com/.
I am really loving my Ruby journey.
-subbu
Which doesn't appear to be true. Look at this:
result = (x=20)
puts result #20
result = true and x=20
puts result #true
The output isn't the same.
Precedence...
result = (true and x = 20)
Ah. Thanks.
Or:
result = true && x = 20
The precedence is the only difference between 'and' and '&&'.
Does that mean = has higher precedence than 'and'?
Great. Thanks.