2015-04-26 29 views
1

是否有這兩個語句之間的任何差別:否定表達式

! (name == "bob") 

name != "bob" 

對我來說,好像他們都做同樣的事情。他們有什麼不同,如果有的話?

+0

這是一樣的。這就像是問'5-1'還是'5 +(-1)' –

+0

有什麼區別?我們是否問性能問題?(如果我們只談論字符串或者不同的對象,實現)? ...或者我們在談論最終結果(它們是相同的,除非'#!='和'#=='方法沒有按預期行事)? – Myst

回答

0

那些將返回相同的結果我能想到的任何例子,但檢查其他東西的時候表達式之前放置!可以幫助(例如!my_array.include?("bob")

4

他們幾乎是相同的。

  • ! (name == "bob")調用兩種方法!==。你可以寫它像name.==('bob').!
  • name != "bob"只調用一個方法!=name.!=('bob')

除非您重新定義!=,否則您不必擔心這兩個選項。在大多數情況下,它們是相同的。

下面是一個例子,你如何能打破它:

name = 'bob' 
def name.!= s 
    true 
end 
name.!=('bob') # => true 
name.==('bob').! # => false 

您可能期望的第一個結果是false因爲左側(可變name)的'bob'右側等於'bob',但它並不是因爲該方法被重新定義。