根據我已閱讀的有關Ruby中||=
運算符的內容,我預計下面的代碼行應將示例中的變量a
(尚未分配的變量)分配給5
。紅寶石測試和賦值變量
a |= "-----n-".index /n/
只是評估"-----n-".index /n/
自身給你5
。
然而,執行上述行之後,a
設爲true
。
下套b
到false
,而我預計b
應該nil
:
b |= "-----n-".index /o/
能否請你這個解釋一下嗎?
根據我已閱讀的有關Ruby中||=
運算符的內容,我預計下面的代碼行應將示例中的變量a
(尚未分配的變量)分配給5
。紅寶石測試和賦值變量
a |= "-----n-".index /n/
只是評估"-----n-".index /n/
自身給你5
。
然而,執行上述行之後,a
設爲true
。
下套b
到false
,而我預計b
應該nil
:
b |= "-----n-".index /o/
能否請你這個解釋一下嗎?
||=
和|=
是不同的運營商。你談論一個,但使用另一個。請注意!
a ||= "-----n-".index(/n/) # => 5
b ||= "-----n-".index(/o/) # => nil
c |= "-----n-".index(/n/) # => true
d |= "-----n-".index(/o/) # => false
這是因爲a |= expr
被脫到a = a | expr
。在右側,a
最初是nil
。
該表達式相當於a = nil | expr
,如果參數非零(參見documentation on nil#|瞭解詳細信息),則返回true。你可能打算寫a ||= expr
這是desugared a = a || expr
。
對不起,我犯了一個錯誤,我們之間的混淆| =和|| =。嗯,我確實看到它的作用。 – mydoghasworms 2013-03-22 05:50:23
'a || = expr' **不是同一個**,因爲'a = a || expr'。它有時與'a ||相同a = expr',但並非總是如此。請參閱http://stackoverflow.com/a/2505285/421705 – 2013-03-22 08:43:55
'|'是按位* *'或'運營商,而''||是*邏輯*'或'運營商。另一方面,'|| ='不是一個操作符。解析器會看到'a || = b'並將其視爲'a = a || B'。你可以專注於'||'或'|'。 – oldergod 2013-03-22 05:06:13
這是他的錯誤,是的。但是爲什麼按位OR在應用於未定義的變量時返回布爾值 - 這是一個難題! – 2013-03-22 05:08:00
@SergioTulentsev它不是未定義的。解析器設置爲'nil'所有'var = anything'變量。 – oldergod 2013-03-22 05:08:44