このコードを使用すると:
x = []
x << 1
if (x[0].inspect == 1)
puts "OLLAAA"
end
何も出力しませんが、toであるため、出力する必要がx[0].inspect
あります。しかし、に変更すると、出力が得られます。または、がに変更された場合。何か案は?==
1
==
!=
"OLLAAA"
if
unless
このコードを使用すると:
x = []
x << 1
if (x[0].inspect == 1)
puts "OLLAAA"
end
何も出力しませんが、toであるため、出力する必要がx[0].inspect
あります。しかし、に変更すると、出力が得られます。または、がに変更された場合。何か案は?==
1
==
!=
"OLLAAA"
if
unless
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
に変更==
すると!=
、明らかにロジックが反転するため、印刷されます。if
toについてもまったく同じことが起こっていunless
ます。
以下のため:
x[0].inspect # => "1"
x[0].inspect
Fixnum
は、インスタンス 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