我的印象中,我可以使用紅寶石:區別&=和&& =
bool &= true
# and
bool &&= true
# indifferently
有沒有兩者之間有什麼區別?不推薦一個解決方案嗎?
其實
bool = true & false # false
那麼,什麼是一般&
和&&
之間的區別? (我想這同樣適用於||
)
我的印象中,我可以使用紅寶石:區別&=和&& =
bool &= true
# and
bool &&= true
# indifferently
有沒有兩者之間有什麼區別?不推薦一個解決方案嗎?
其實
bool = true & false # false
那麼,什麼是一般&
和&&
之間的區別? (我想這同樣適用於||
)
嘗試以下操作:
x = 5
x |= 2
=> 7
| =和& =等同於按位X = X | 2和X = X 2 &
VS
x = 5
x ||= 2
=> 5
在第二個語句,x ||= 2
,它意味着x = 2
如果x是零,否則是X。 (x = (x || 2)
;表達x || 2
返回x,如果x是什麼,但零否則返回2.
x ||= 'foo'
實際上是很常見的紅寶石(組x爲foo爲或X爲尚未設置)
x = (x & 3)
(其相當於x &= 3
),返回3(第二個操作數),除非x爲0,則返回0) )
同樣的邏輯也適用於&,但它更容易找到我心中的頂部爲例|
=)
的關鍵字之間的主要區別在於,第一|
是一種方法,並且可以重新定義爲一個類,並且所述第二||
不大,並且可以從未定義爲方法,並只是用於語言的語法,你可以下面的例子中看到:
Array.new.respond_to?(:|)
# => true
Array.new.respond_to?(:||)
SyntaxError: (irb):35: syntax error, unexpected tOP_ASGN, expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END
所以,當你應用了#|
方法就能夠返回,從true
,或false
不同的值。雖然紅寶石的TrueClass
,和FalseClass
這些值是true
或false
,但其他的後代可以重新定義的返回值,但是,對於Array
和Set
類它實現類似於布爾按位操作功能。所以可以肯定的是,true
或false
類的方法也返回true
或false
。否則,該關鍵字||
是真正的語言布爾運算符,但它與價值真正和工作不是真,你可以看到它例如:
'value1' || 'value2'
# => "value1"
true || false
# => true
'value1' || false
# => "value1"
false || 'value2'
# => "value2"
返回衣被合計總是服從於邏輯表達式,但它的值是,如我上面所示,真,和不是真。因此,你在例如返回值不僅true/false
雙,但真正的變量值的看到過了,你可以按如下方式使用它作爲if
條件運算符:
'value1' || 'value2'
和
if 'value1'
'value1'
else
'value2'
end
將返回相同的價值。
根據或相等分配我們看到下列情況:
A |= false
# NameError: uninitialized constant A
a |= false
# false
A ||= false
# => false
在我們能夠|=
操作分成兩個第一種情況:來電#|
方法,以及將結果提供給分配變量。在第二種情況下,ruby解釋器看到整個運算符||=
,驗證它是否爲nil
或undefined,如果是,則將該表達式結果賦值給變量或const。
對&
,&&
有相同的解釋。
不投降,看到你花時間回答,但至少methinks * *提及'&'和'|'通常是按位運算符,並且它們用於其他事物(實際上,它們非常類似於按位和/或),如'Array'和'Set '。 –
:||給你非法的語法錯誤。你應該引用符號:'||'。 – Yossi
@Yossi the':<<'不要發出同樣的問題。你不能將一個方法定義爲'def ||'。 –
當你只在布爾值上使用&
運算符時,與&&
沒有什麼區別,但是如果你想在返回布爾值的函數中使用它,那麼就會有差異。看看下面的代碼:
def side_effect(message="hello")
puts message
true
end
#writes "hello" 2 times to the console and then returns false
false & side_effect & side_effect
# just returns false without writing "hello" to the console.
false && side_effect && side_effect
我不知道Ruby,但我想'&='按位與'&& ='邏輯和 –
http://en.wikipedia.org/wiki/Bitwise_operation – emaillenin
http://stackoverflow.com/questions/4115045/ruby-what-does-the-snippet-num-1-0-exactly-do – doctorlove