0

このコードを使用すると:

x = []
x << 1

if (x[0].inspect == 1) 
  puts "OLLAAA"  
end

何も出力しませんが、toであるため、出力する必要がx[0].inspectあります。しかし、に変更すると、出力が得られます。または、がに変更された場合。何か案は?==1==!="OLLAAA"ifunless

4

4 に答える 4

6

Fixnum#inspectはエイリアスですto_s- と比較する必要があります"1"

于 2013-10-21T21:24:02.693 に答える
3

なぜそんなに確信があるの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ます。

于 2013-10-21T21:23:33.407 に答える
2

以下のため:

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>
于 2013-10-21T21:23:40.227 に答える
1

上記のように、検査は文字列を返します。あなたはあなたの問題を解決することができます

if (x[0].inspect.to_i == 1)
  puts "Hey I am an integer :)"
end
于 2013-10-21T21:28:50.507 に答える