youzhengchuan 发表于 2012-08-26 12:22

Ruby变量类型判断小问题一个

本帖最后由 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
if value.zero? then
      puts "value is zero"
else
      printf "[%s] is [%s]\n",value,value.class
end

请问为什么通过参数传递过来的整数,不能被自动判断为整形?
于是,又通过另外一个程序来看看ruby的判断:

#!ruby

value=ARGV

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
is

为什么明明是整形,ruby判断为string并且无法使用Integer类的方法呢。

zhlong8 发表于 2012-08-26 13:10

命令行参数都是字符串,你需要自己先转类型 ARGV.to_i.zero?

Sevk 发表于 2012-08-26 14:06

Sevk 发表于 2012-08-26 14:07

页: [1]
查看完整版本: Ruby变量类型判断小问题一个