今天早上我在Ruby遇到一个奇怪的事情,关于三元运算符。它是怎么回事:
x = nil ? x : true
众所周知,x
设置为 true ,这并不奇怪。现在,随后运行:
defined?(y)
=> nil
这个答案意味着y
尚未定义。但是:
defined?(y) ? y : true
返回 true 。再也不用惊讶了。惊喜来到这里:
y = defined?(y) ? y : true
会发生什么? y
设置为nil
!
但等等,还有更多。现在分配y
后,让我们使用z
:
defined?(z)
#=> nil
暗示z
尚未定义。
z = defined?(z) ? false : true
令人惊讶的是:z
设置为 false 。我不知道会发生什么。在if
块中执行相同操作会得到相同的结果。
z1 = if defined?(z1) then z1 else true end
再次z1
设置为nil
。
z2 = if defined?(z2) then false else true end
这也让我感到惊讶,因为z2
设置为false
。现在我假设上面的表达式表现得像:
z3 = if nil then false else true end
考虑到z3
在上述所有情况下都返回true
这一事实,defined?
被nil
分配给defined?
。这让我相信{{1}}调用有一些特别的工作,但我在Ruby文档中找不到相关的信息。
顺便说一下。我在ruby 1.8.7和1.9.2
上测试了上面的内容答案 0 :(得分:0)
确定。我认为这解释了它:
ccc = (ccc == nil)
=> true
显然,无论何时为变量赋值,ruby首先将其初始化为nil。