0

当我使用此代码时:

x = []
x << 1

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

它什么也不输出,但它应该是因为x[0].inspectis ==to 1。但是如果我更改==!=我得到输出"OLLAAA",或者何时if更改为unless. 有任何想法吗?

4

4 回答 4

6

Fixnum#inspect是一个别名to_s- 你需要比较"1"

于 2013-10-21T21:24:02.693 回答
3

你为什么这么肯定x[0].inspect == 1Object::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].inspect给出字符串实例,它不等于Fixnum实例 1。因此x[0].inspect == 1计算结果为false,并且您没有得到输出。现在当你使用时!=,希望你明白为什么你确实得到了输出。

Fixnum#inpectcall 实际上确实如此Fixnum#to_s。见下文 :

12.method(:inspect) # => #<Method: Fixnum#to_s>
于 2013-10-21T21:23:40.227 回答
1

如上所述,inspect 返回一个字符串。你可以解决你的问题

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