获取传递给ruby脚本的原始类型的参数

时间:2016-02-26 10:15:16

标签: ruby

我在script.rb中有这段代码:

puts ARGV[0].class 

当我将参数传递给脚本时,如:

ruby script.rb 1

1似乎会自动转换为字符串,因为我得到String。否则,当我这样做时:

1.class

我得到Fixnum

有没有办法让原始类型的参数传递给脚本?

3 个答案:

答案 0 :(得分:1)

不,传递给脚本的参数总是字符串。

答案 1 :(得分:1)

  

" 1"似乎自动转换为字符串

不,从一开始就是一个字符串。

  

有没有办法获得传递参数的原始类型?

是的,您只需像现在一样打电话给class,就会得到String

答案 2 :(得分:1)

命令行参数始终作为字符串传递,并始终用空格分隔:

# script.rb
p ARGV
$ ruby script.rb foo bar 123 "I'm one arg"
["foo", "bar", "123", "I'm one arg"]

这不是Ruby的限制,它是命令行界面的工作方式。如果你写:

$ cp script.rb 1.00

然后程序cp将文件“script.rb”复制到文件“1.00”(是的,这是一个糟糕的文件名,但是有效的文件名)。这是有效的,因为两个参数script.rb1.00都作为字符串传递。如果 cp 将收到字符串"script.rb"而数字1.0(不需要尾随零),该命令肯定会失败。

你不能改变这种行为,但你可以自己转换这个论点:

# script.rb
number = Integer(ARGV[0], 10)
puts number, number.class

Integer是内置转换功能。当给定一个字符串时,它会尝试将字符串转换为具有给定base的整数。

$ ruby script.rb 123
123
Fixnum

如果字符串无效,它也会引发错误:

$ ruby script.rb foo
script.rb:1:in `Integer': invalid value for Integer(): "foo" (ArgumentError)
    from script.rb:1:in `<main>'