任何人都可以向我解释这个结果:
(trad = {foo: "Foo", bar:"Bar"}).has_key? :foo ? trad[:foo] : :foo
=> false
Run Code Online (Sandbox Code Playgroud)
我希望它能回归:
=> "Foo"
Run Code Online (Sandbox Code Playgroud)
(trad = {foo: "Foo", bar:"Bar"}).has_key? :foo ? trad[:foo] : :foo
Run Code Online (Sandbox Code Playgroud)
就好像:
(trad = {foo: "Foo", bar:"Bar"}).has_key? (:foo ? trad[:foo] : :foo)
Run Code Online (Sandbox Code Playgroud)
: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"
Run Code Online (Sandbox Code Playgroud)
Hash#fetch(key, default) 似乎更合适:
>> {foo: "Foo", bar:"Bar"}.fetch(:foo, :foo)
=> "Foo"
>> {foo: "Foo", bar:"Bar"}.fetch(:baz, :baz)
=> :baz
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |