我在script.rb
中有这段代码:
puts ARGV[0].class
当我将参数传递给脚本时,如:
ruby script.rb 1
1
似乎会自动转换为字符串,因为我得到String
。否则,当我这样做时:
1.class
我得到Fixnum
。
有没有办法让原始类型的参数传递给脚本?
答案 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.rb
和1.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>'