任何人都可以向我解釋這個結果,請:爲什麼我得到一個三元條件的意外結果?
(trad = {foo: "Foo", bar:"Bar"}).has_key? :foo ? trad[:foo] : :foo
=> false
我希望它返回:
=> "Foo"
任何人都可以向我解釋這個結果,請:爲什麼我得到一個三元條件的意外結果?
(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)
: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
對於括號中的應用程序的想丟失了...
(trad = {foo: "Foo", bar:"Bar"}).has_key? :foo ? trad[:foo] : :foo # => false
(trad = {foo: "Foo", bar:"Bar"}).has_key?(:foo) ? trad[:foo] : :foo # => "Foo"
我會小心寫這樣的代碼:
(trad = {foo: "Foo", bar:"Bar"})
這不是地道的,所以用:
trad = {foo: "Foo", bar:"Bar"}
trad.has_key?...
的原因是,在恐慌的時候,如在2:45 AM當你的編碼合作伙伴因爲他正在打電話而收到有關係統中斷的電話,並且深入到代碼中時,該分配可能很難找到。
在代碼審查,我建議這樣的事情在其他:
trad = {foo: "Foo", bar:"Bar"}
trad.has_key?(:foo) ? trad[:foo]
: :foo # => "Foo"
注:關於Ruby這隻能1.9+。
這一切都說,我強烈建議使用fetch
作爲recommended by @falsetru。
非常清楚。謝謝。 (哈希#取得更好,謝謝你) – Pol0nium
很好的調用'哈希#提取'。 – tadman