-4

以下代码尝试检测 a)replica_2具有键:primary,而 b)replica_1不具有该键或具有true它的值。我无法检测哈希是否有密钥。我正在寻找评论,更正等。

replica_1 = { :hostname => "16.86.193.100", :port => 27017 }
replica_2 = { :hostname => "16.86.193.102", :port => 27019, :primary => true }

puts "replica_1=", replica_1

if replica_1[ :primary ] = true
  puts "replica_1[ :primary ] is set"
else
  puts "replica_1[ :primary ] is not set/true"
end

puts "replica_2=", replica_2

if replica_2[ :primary ] = true
  puts "replica_2[ :primary ] is set"
end

输出:

replica_1=
{:hostname=>"16.86.193.100", :port=>27017}
replica_1[ :primary ] is set
replica_2=
{:hostname=>"16.86.193.102", :port=>27019, :primary=>true}
replica_2[ :primary ] is set
4

3 回答 3

6

= true将其设置为true每次。一是=赋值;==是比较。但看起来你的意思是:

if replica_2[:primary]

缺少键将导致nil.

于 2013-10-01T17:36:03.773 回答
4

您混淆了两个运算符,=并且==.

一个是赋值并返回赋值。另一个比较两个值并返回一个布尔值。您使用的是前者,并且您的条件始终为真。用这个:

 if replica[:primary]

replica[:primary]当设置为falseornil或缺失时,此条件将不匹配。

于 2013-10-01T17:36:03.477 回答
4

拍头错误,=->==在你的if陈述中,你很好。

此外,为了检查散列中是否存在密钥,请尝试include?has_key?取决于读取更好的内容。

于 2013-10-01T17:37:11.253 回答