-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

= truetrue毎回に設定しています。1 つ=は課題です。==比較です。しかし、あなたが意図したように見えます:

if replica_2[:primary]

キーが見つからないと、nil.

于 2013-10-01T17:36:03.773 に答える
4

=2 つの演算子と を混同しています==

割り当てを行い、割り当てられた値を返します。もう 1 つは 2 つの値を比較し、ブール値を返します。前者を使用しており、条件は常に真です。これを使って:

 if replica[:primary]

がorreplica[:primary]に設定されている場合、この条件は一致しません。falsenil

于 2013-10-01T17:36:03.477 に答える
4

ヘッドスラップミス、=->==あなたのif声明で、あなたはいいです。

また、ハッシュ内のキーの存在を確認するには、include?orを試してみてくださいhas_key?

于 2013-10-01T17:37:11.253 に答える