否定表达

时间:2015-04-26 22:21:47

标签: ruby negation

这两个陈述之间是否有任何区别:

! (name == "bob")

name != "bob"

对我而言,似乎他们都做同样的事情。如果有的话,它们有何不同?

2 个答案:

答案 0 :(得分:4)

它们几乎相同。

  • ! (name == "bob")调用两种方法!==。你可以像name.==('bob').!一样写出来。
  • name != "bob"只调用一种方法!=name.!=('bob')

除非您重新定义!=,否则您不必担心这两个选项。在大多数情况下,它们是相同的。

以下是一个如何打破它的例子:

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

您可能希望第一个结果为false,因为左侧的'bob'(变量name)等于右侧的'bob',但它不是因为该方法被重新定义。

答案 1 :(得分:0)

那些会在我能想到的任何例子中返回相同的结果,但在检查其他内容时(例如!),将!my_array.include?("bob")放在表达式之前会有所帮助。