このコードを使用すると:
x = []
x << 1
if (x[0].inspect == 1)
puts "OLLAAA"
end
何も出力しませんが、toであるため、出力する必要がx[0].inspectあります。しかし、に変更すると、出力が得られます。または、がに変更された場合。何か案は?==1==!="OLLAAA"ifunless
このコードを使用すると:
x = []
x << 1
if (x[0].inspect == 1)
puts "OLLAAA"
end
何も出力しませんが、toであるため、出力する必要がx[0].inspectあります。しかし、に変更すると、出力が得られます。または、がに変更された場合。何か案は?==1==!="OLLAAA"ifunless
Fixnum#inspectはエイリアスですto_s- と比較する必要があります"1"
なぜそんなに確信があるのx[0].inspect == 1ですか? Object::inspect文字列を返します。
$ irb
2.0.0-p247 :001 > x = []
=> []
2.0.0-p247 :002 > x << 1
=> [1]
2.0.0-p247 :003 > x[0].inspect == 1
=> false
に変更==すると!=、明らかにロジックが反転するため、印刷されます。iftoについてもまったく同じことが起こっていunlessます。
以下のため:
x[0].inspect # => "1"
x[0].inspectFixnumは、インスタンス 1と等しくない文字列インスタンスを返しx[0].inspect == 1ますfalse。を使用する!=と、出力が得られた理由がわかると思います。
Fixnum#inpect実際に電話しFixnum#to_sます。下記参照 :
12.method(:inspect) # => #<Method: Fixnum#to_s>
上記のように、検査は文字列を返します。あなたはあなたの問題を解決することができます
if (x[0].inspect.to_i == 1)
puts "Hey I am an integer :)"
end