Ruby 如果包括?==假的

Ruby 如果包括?==假的,ruby,Ruby,我有一个数组和一个字符串: $header = ["Date", "Time", "Site Name", "Computer Name"] columnName = "esfjk sdhf sdf" 我正在检查$header是否包含columnName: return if $header.include? columnName == false 上面的条件总是返回true,即使数组不包含字符串,代码也会继续执行 当$hash是一个哈希,而recordNum是一个不在其中的数字,如9999

我有一个数组和一个字符串:

$header = ["Date", "Time", "Site Name", "Computer Name"]
columnName = "esfjk sdhf sdf"
我正在检查
$header
是否包含
columnName

return if $header.include? columnName == false
上面的条件总是返回
true
,即使数组不包含字符串,代码也会继续执行

$hash
是一个哈希,而
recordNum
是一个不在其中的数字,如
9999999
时,我也会遇到同样的问题,我会:

return if $hash.has_key? recordNum == false
发生这种情况的原因是什么

$header.include? columnName == false
被解释为

$header.include?(columnName == false)
就是通常,

$header.include?(false)
这是错误的。因此,您要做的是:

$header.include?(columnName) == false
但在你的特殊情况下,我会这样做(谢谢,亚历克斯·韦恩):

如果你这样做了,那么你可以回到无括号的形式:

return unless $header.include? columnName

return,除非$header。include?(columnName)
Nice and simple.
一些总是布尔的表达式==false
或者
一些总是布尔的表达式==true
是多余的。当你有这种感觉时,会有一种代码的味道。正是由于这个事实,你的代码非常糟糕。我为我的“非常糟糕”的代码道歉,事实是我两天前才开始学习Ruby,还没有学会所有的关键字(如“not”和“除非”),但它们都是完全不相关的。@sawa不必要地粗鲁,我不会说你的代码非常糟糕,但这一点是正确的。在几乎任何语言中,比较的目的都是生成一个布尔值,因此,当您已经有了其中一个布尔值时,在比较中使用它有点过分。您应该尽可能避免使用全局变量(以
$
开头的变量)(这几乎一直都是)@ThomasOwers也许您可以将这些函数封装到对象中,并将数组作为实例变量存储在对象中。从另一个角度来看:我已经编写了数不清的Ruby代码,并且认为我从未在调试之外使用过全局变量。
return unless $header.include? columnName