这是我的代码:
if ARGV[0] == false
puts "Usage: ./script.rb argument"
exit
end
print "Yey we got an argument: " ARGV[0]
Run Code Online (Sandbox Code Playgroud)
但我不能让代码检查是否给出了ARGV [0],我应该怎么做?
Dav*_*ton 31
检查它是否empty?(或检查其长度):
if ARGV.empty?
puts ...
exit
end
Run Code Online (Sandbox Code Playgroud)
考虑使用任何Ruby命令行参数解析器,如OptionParser.
处理位置参数的最简单方法(除了使用gem来执行此操作)是将它们一次一个地移开:
arg1 = ARGV.shift
arg2 = ARGV.shift
Run Code Online (Sandbox Code Playgroud)
缺少的论点将是零.让我们利用它来给arg2一个默认值:
arg1 = ARGV.shift
arg2 = ARGV.shift || 'default value goes here'
Run Code Online (Sandbox Code Playgroud)
检查必需的参数是微不足道的:
raise "missing argument" unless arg1
Run Code Online (Sandbox Code Playgroud)
如果提供的参数太多,也很容易看出:
raise "too many arguments" unless ARGV.empty?
Run Code Online (Sandbox Code Playgroud)
我意识到已经给出了一个很好的解决方案,但没有人提到您的示例不起作用的真正原因。
您的示例代码的问题是,如果没有给出参数,ARGV[0]将返回nil, 并且nil == false为 false。nil是“假”,但不等于假。你本来可以做的是:
unless ARGV[0]
puts "Usage: ..."
exit 1
end
Run Code Online (Sandbox Code Playgroud)
这本来是有效的,因为这个陈述现在取决于虚假,而不是与实际的相等false。
但不要使用这段代码,如果您陈述您的实际意图,那就更清楚了,即您想知道是否有任何参数(而不是第一个参数是否为假)。所以使用其他人建议的代码:
if ARGV.empty?
puts "Usage..."
exit 1
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20497 次 |
| 最近记录: |