谁能给我解释一下这个结果:
(trad = {foo: "Foo", bar:"Bar"}).has_key? :foo ? trad[:foo] : :foo
=> false
我预计它会返回:
=> "Foo"
最佳答案
(trad = {foo: "Foo", bar:"Bar"}).has_key? :foo ? trad[:foo] : :foo
就像:
(trad = {foo: "Foo", bar:"Bar"}).has_key? (:foo ? trad[:foo] : :foo)
:富? trad[:foo] : :foo
被评估为 "Foo"
因为 :foo
被视为真值。
(trad = {foo: "Foo", bar:"Bar"}).has_key? “Foo”
产生 false
因为没有“Foo”键。
使用以下(用括号覆盖优先级)获得预期结果:
>> ((trad = {foo: "Foo", bar:"Bar"}).has_key? :foo) ? trad[:foo] : :foo
=> "Foo"
Hash#fetch(key, default)
似乎更合适:
>> {foo: "Foo", bar:"Bar"}.fetch(:foo, :foo)
=> "Foo"
>> {foo: "Foo", bar:"Bar"}.fetch(:baz, :baz)
=> :baz
关于ruby - 为什么我在三元条件下会得到意想不到的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19034547/