Alo*_*lon 14 ruby and-operator
我对Ruby中的和/ &&/=关键字有疑问.
ruby文档说,所提到的关键字的优先级是:(1)&&,(2)=,(3)和.
我写了这段代码:
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
Run Code Online (Sandbox Code Playgroud)
输出是:
1)2 4 [预期]
2)4 4 [ 为什么?]
出于某种原因,使用&&会导致a和b评估为4?
Jör*_*tag 23
我不太明白你问的问题.我的意思是,你已经自己给出了答案,之前甚至提出质疑:&&结合更紧比=同时and结合小于紧密=.
因此,在第一种情况下,表达式的计算方法如下:
( a=f(2) ) and ( b=f(4) )
( a= 2 ) and ( b=f(4) )
2 and ( b=f(4) ) # a=2
2 and ( b= 4 ) # a=2
2 and 4 # a=2; b=4
4 # a=2; b=4
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,评估如下:
a = ( f(2) && ( b=f(4) ) )
a = ( 2 && ( b=f(4) ) )
a = ( 2 && ( b= 4 ) )
a = ( 2 && 4 ) # b=4
a = 4 # b=4
4 # b=4; a=4
Run Code Online (Sandbox Code Playgroud)
Pes*_*sto 21
原因很简单:优先权.如你所说,订单是:
由于&&具有优先权=,因此语句的评估方式如下:
if a = (f(2) && (b = f(4))) then
Run Code Online (Sandbox Code Playgroud)
结果如下:
if a = (2 && 4) then
Run Code Online (Sandbox Code Playgroud)
当x和y是整数时,x && y返回y.从而2 && 4导致a = 4.
为了比较,第一个评估如下:
if (a = f(2)) and (b = f(4)) then
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5266 次 |
| 最近记录: |