Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby&&;=边缘案例_Ruby - Fatal编程技术网

Ruby&&;=边缘案例

Ruby&&;=边缘案例,ruby,Ruby,有点边缘的情况,但是你知道为什么&&=会这样吗?我用的是1.9.2 obj = Object.new obj.instance_eval {@bar &&= @bar} # => nil, expected obj.instance_variables # => [], so obj has no @bar instance variable obj.instance_eval {@bar = @bar && @bar} # ostensibly t

有点边缘的情况,但是你知道为什么&&=会这样吗?我用的是1.9.2

obj = Object.new
obj.instance_eval {@bar &&= @bar} # => nil, expected
obj.instance_variables # => [], so obj has no @bar instance variable

obj.instance_eval {@bar = @bar && @bar} # ostensibly the same as @bar &&= @bar
obj.instance_variables # => [:@bar] # why would this version initialize @bar?
为了进行比较,| |=将实例变量初始化为nil,正如我所期望的:

obj = Object.new
obj.instance_eval {@foo ||= @foo}
obj.instance_variables # => [:@foo], where @foo is set to nil

谢谢

这是因为
@bar
的计算结果为false,因此
&&
将不再对表达式进行计算。。。与第二个表达式相反,无论以下表达式解析为什么,第二个表达式在任何情况下都指定给
@bar
。无论解析为什么初始值,
@foo
都会对完整表达式求值


因此,前两个表达式之间的区别在于,在第一个表达式中,赋值取决于
@bar
的(未定义)值,而在第二个表达式中,赋值是无条件的
&&=
不是
x=x&&y
的快捷方式。这是x
x=x&&y的快捷方式,如果x

感谢您的澄清!另外,刚刚谈到了Ruby 1.9编程中解释这一点的部分。。。可能应该查一下:/@Alan如果我的回答能解决你的问题,请随意接受我的回答。@AlanO'Donnell是这个主题的一部分。这确实是x=x&&y@blj不它更像是
x&&x=y
。。。你的建议在Ruby中有所不同。这篇文章很受欢迎!