2013-03-22 95 views
-3

根據我已閱讀的有關Ruby中||=運算符的內容,我預計下面的代碼行應將示例中的變量a(尚未分配的變量)分配給5紅寶石測試和賦值變量

a |= "-----n-".index /n/ 

只是評估"-----n-".index /n/自身給你5

然而,執行上述行之後,a設爲true

下套bfalse,而我預計b應該nil

b |= "-----n-".index /o/ 

能否請你這個解釋一下嗎?

+0

'|'是按位* *'或'運營商,而''||是*邏輯*'或'運營商。另一方面,'|| ='不是一個操作符。解析器會看到'a || = b'並將其視爲'a = a || B'。你可以專注於'||'或'|'。 – oldergod 2013-03-22 05:06:13

+1

這是他的錯誤,是的。但是爲什麼按位OR在應用於未定義的變量時返回布爾值 - 這是一個難題! – 2013-03-22 05:08:00

+0

@SergioTulentsev它不是未定義的。解析器設置爲'nil'所有'var = anything'變量。 – oldergod 2013-03-22 05:08:44

回答

1

||=|=是不同的運營商。你談論一個,但使用另一個。請注意!

a ||= "-----n-".index(/n/) # => 5 
b ||= "-----n-".index(/o/) # => nil 

c |= "-----n-".index(/n/) # => true 
d |= "-----n-".index(/o/) # => false 
2

這是因爲a |= expr被脫到a = a | expr。在右側,a最初是nil

該表達式相當於a = nil | expr,如果參數非零(參見documentation on nil#|瞭解詳細信息),則返回true。你可能打算寫a ||= expr這是desugared a = a || expr

+0

對不起,我犯了一個錯誤,我們之間的混淆| =和|| =。嗯,我確實看到它的作用。 – mydoghasworms 2013-03-22 05:50:23

+0

'a || = expr' **不是同一個**,因爲'a = a || expr'。它有時與'a ||相同a = expr',但並非總是如此。請參閱http://stackoverflow.com/a/2505285/421705 – 2013-03-22 08:43:55