jet*_*roo 2 ruby if-statement variable-assignment conditional-operator
我想知道为什么与三元运算符的赋值反应奇怪:
a = "foo"
=> "foo"
a = nil ? nil : a
=> "foo"
a
=> "foo"
Run Code Online (Sandbox Code Playgroud)
但:
a = nil ? nil : a
=> "foo"
a = "bar" ? "bar" : a
=> "bar"
a
=> "bar"
Run Code Online (Sandbox Code Playgroud)
和:
if a = nil
puts "should be nil"
end
=> nil
Run Code Online (Sandbox Code Playgroud)
不会puts是字符串,因为虽然作业成功,但a = nil会返回nil错误.
这一切都表现得像预期的那样吗?
if a = nil
Run Code Online (Sandbox Code Playgroud)
这不会返回false,它返回已分配的内容,在本例中为nil.nil是'虚假'所以这就是为什么它不进入puts
至于为什么:
a = "foo"
=> "foo"
a = nil ? nil : a
=> "foo"
a
=> "foo"
Run Code Online (Sandbox Code Playgroud)
这是因为你a再次分配.nil ? nil : a返回a以便分配.所以a = nil ? nil: a最终被解释为a = a.
我相信这个:
if a = nil
Run Code Online (Sandbox Code Playgroud)
应该:
if a == nil
Run Code Online (Sandbox Code Playgroud)
一个单一的=装置的分配,并且a = nil被分配nil到a和评估,以nil作为结果,这是错误的.这就是为什么执行不进入puts部分,而==意味着平等测试.
除此之外,你在代码中发现了什么奇怪的东西?毕竟这是正常的行为.