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