- 论坛徽章:
- 0
|
本帖最后由 youzhengchuan 于 2012-08-26 12:33 编辑
在《Learning Ruby》第二章37页“变量”小节中说到,Ruby不同于C等语言变量不是静态类型,ruby会自动判断变量类型。
在下面这个程序修改自第二章中44页“条件语句”小节,获取一个外部参数并判断是否为0,但是发现就算是传递的外部参数为0,程序运行时候仍然报错:
# ruby obj 0
obj:4: undefined method `zero?' for "0":String (NoMethodError)
value=ARGV[0]
if value.zero? then
puts "value is zero"
else
printf "[%s] is [%s]\n",value,value.class
end
请问为什么通过参数传递过来的整数,不能被自动判断为整形?
于是,又通过另外一个程序来看看ruby的判断:
#!ruby
value=ARGV[0]
if value.kind_of? Integer then
puts "value is zero"
else
printf "[%s] is [%s]\n",value,value.class;
end
当传递参数为0的时候,ruby仍然判断变量类型为string:
# ruby obj 0
[0] is [String]
为什么明明是整形,ruby判断为string并且无法使用Integer类的方法呢。 |
|