为什么没有赋值的三元运算符会返回预期的输出?

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错误.

这一切都表现得像预期的那样吗?

Dty*_*Dty 7

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.


Ósc*_*pez 5

我相信这个:

if a = nil
Run Code Online (Sandbox Code Playgroud)

应该:

if a == nil
Run Code Online (Sandbox Code Playgroud)

一个单一的=装置的分配,并且a = nil被分配nila和评估,以nil作为结果,这是错误的.这就是为什么执行不进入puts部分,而==意味着平等测试.

除此之外,你在代码中发现了什么奇怪的东西?毕竟这是正常的行为.