当我使用此代码时:
x = []
x << 1
if (x[0].inspect == 1)
puts "OLLAAA"
end
它什么也不输出,但它应该是因为x[0].inspectis ==to 1。但是如果我更改==为!=我得到输出"OLLAAA",或者何时if更改为unless. 有任何想法吗?
当我使用此代码时:
x = []
x << 1
if (x[0].inspect == 1)
puts "OLLAAA"
end
它什么也不输出,但它应该是因为x[0].inspectis ==to 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
如果您更改==为!=,显然您会翻转逻辑,因此会打印。完全相同的事情正在发生ifto unless。
由于以下原因:
x[0].inspect # => "1"
x[0].inspect给出字符串实例,它不等于Fixnum实例 1。因此x[0].inspect == 1计算结果为false,并且您没有得到输出。现在当你使用时!=,希望你明白为什么你确实得到了输出。
Fixnum#inpectcall 实际上确实如此Fixnum#to_s。见下文 :
12.method(:inspect) # => #<Method: Fixnum#to_s>
如上所述,inspect 返回一个字符串。你可以解决你的问题
if (x[0].inspect.to_i == 1)
puts "Hey I am an integer :)"
end