2010-09-27 83 views

回答

9

它主要用作初始化變量到一定值時,如果沒有設置簡短。

想想聲明返回x || (x = y)。如果x具有一個值(false除外),則只有||的左側將被評估(因爲||短路線),並且x將不會被重新分配。但是,如果xfalsenil,則將評估右側,其將設置xy,並且將返回y(賦值語句的結果在右側)。

有關更多討論,請參閱http://dablog.rubypal.com/2008/3/25/a-short-circuit-edge-case

+0

+1忘了它 – 2010-09-27 03:51:27

+0

'x || = y'的行爲就像'x = y除非x'(如果我們假設x和y代表任意表達式而不一定是變量)是* not *與'x = x || (考慮x = x不是無操作的情況)或者x = y(如果x.nil?)(考慮x是假的情況)。 – sepp2k 2010-09-27 08:11:04

+0

Jorg W Mittag認爲這是不正確的,在[他的回答](http://stackoverflow.com/questions/995593/what-does-mean-in-ruby)重複的問題。 – 2010-09-27 10:38:12

3

的思想是一致的,與其他類似的運營商(+=*=等):
a ||= ba = a || b

而且這一招不僅限於紅寶石:它通過使用C根多種語言。

編輯排斥downvoters。
請參閱Jörg的其中一個鏈接以獲得更準確的近似值,例如this one
這正是我不喜歡Ruby的原因:它看起來什麼都沒有。

+1

值得注意的是,不是C或C++或Java。 – SingleNegationElimination 2010-09-27 03:43:10

+0

@TokenMacGuy我的意思是一般'詭計':從'a = a @ b'產生'a @ = b'。 – 2010-09-27 03:49:47

+0

這是錯誤的。請閱讀http://Ruby-Forum.Com/topic/151660及其中提供的鏈接。 – 2010-09-27 12:46:49

4

x ||= y經常被用來代替x = y if x == nil