是什麼下面的線是什麼意思?
a ||= {}
a ||= 1
在IRB
它總是返回類的,作爲散列值,對於上述兩種線。 在此先感謝。
是什麼下面的線是什麼意思?
a ||= {}
a ||= 1
在IRB
它總是返回類的,作爲散列值,對於上述兩種線。 在此先感謝。
||=
是賦值運算符,它返回分配的值。 a ||= b
相當於語句a || a = b
,這意味着如果a
被設置並且具有一些真實值,則它保持不變,否則取值爲b
。
在您的示例中,a
僅設置一次,這解釋了您已注意到的行爲。
a ||= {}
a ||= 1 // a is still {}
我見過的典型用法是初始化靜態變量,即。
class Foo
def self.bar
return @bar ||= {}
end
end
編輯:
它擔負着提的是||=
是短路操作。這意味着它在a ||= b
的情況下將只有a = b
的分配。在a
非假的情況下,將不會有a = a
的轉讓。這有些迂腐,但在一些(非常)邊緣情況下很重要。
欲瞭解更多信息,請致電read the definitive list of ||= threads and pages。
你的例子是一個實例變量,而不是一個靜態(或類)變量。這將是'@@東西'。 [仍然是最好的回答:)] – 2011-03-08 08:54:45
@Simon只是注意到了同樣的事情。現在修復(雖然,不完全是你的方式)。 – 2011-03-08 08:55:46
它也經常被用來檢查指派的東西,在哈希值(A-LA:'哈希[關鍵] || = initial_value',特別是如果你下一步想做什麼'哈希[鍵] + = value',這將如果'hash [key] .nil?'是true-ish),則出錯。 – Romain 2011-03-08 09:16:14
你可以像這樣讀取「a || = {}」。如果定義了「a」,則忽略右側的表達式。否則,設置「a」等於右側的表達式。在第一行中,「a」可能是未定義的,所以行將「a」設置爲右側的表達式,即空散列。在第二行中,「a」已經設置爲{},所以它忽略了右邊的值爲1的表達式。
它不檢查是否一個被定義或沒有,而是檢查是否爲真肥胖型(例如既不假不是nil)或沒有。 – Romain 2011-03-09 11:12:04
好,更精確地說...它是否檢查「一」是假的,零,或不確定的,分配「一」據此! – RubyFanatic 2011-03-09 18:48:30
正確,未定義不是真的,這是真的:) – Romain 2011-03-10 10:26:07
@mladen誠然,但我個人會投票結束其他問題青睞這一個。這個在最高評分答案中有更多最新/正確的信息。 – 2011-03-08 13:37:47
重複:[在Ruby中'|| ='是什麼意思?](http://StackOverflow.Com/q/995593/),[在Ruby中'|| ='是什麼意思?](http:// StackOverflow (http://stackOverflow.Com/q/3945711/),[在Ruby變量賦值中的雙重管道符號?](http://q/3800957 /),[紅寶石中的'|| ='是什麼? /StackOverflow.Com/q/4500375/),['|| ='「操作數在ruby中的含義是什麼](http://StackOverflow.Com/q/5124930/),[是Ruby運算符'| | | ='智能?](http://StackOverflow.Com/q/2989862/)以及其他許多人。 – 2011-03-08 17:34:01
另請參見[|| ='(或等於)線程和頁面的最終列表](http://Ruby-Forum.Com/topic/151660/)。在Ruby中'|| ='是什麼意思?](http://StackOverflow.Com/q/995593/)和[|| ='在Ruby中是什麼意思?](http:// StackOverflow。Com/q/3800957 /)甚至鏈接到*相關問題*。 – 2011-03-08 17:35:44