これは私のコードです:
if ARGV[0] == false
puts "Usage: ./script.rb argument"
exit
end
print "Yey we got an argument: " ARGV[0]
しかし、ARGV [0]が指定されているかどうかをコードでチェックすることはできません。どうすればよいですか?
これは私のコードです:
if ARGV[0] == false
puts "Usage: ./script.rb argument"
exit
end
print "Yey we got an argument: " ARGV[0]
しかし、ARGV [0]が指定されているかどうかをコードでチェックすることはできません。どうすればよいですか?
それがそうであるempty?
かどうかを確認してください(またはその長さを確認してください):
if ARGV.empty?
puts ...
exit
end
OptionParserなどのRubyコマンドライン引数パーサーのいずれかを使用することを検討してください。
位置引数を処理する最も簡単な方法(gemを使用して処理する以外)は、一度に1つずつシフトオフすることです。
arg1 = ARGV.shift
arg2 = ARGV.shift
欠落している引数はnilになります。これを利用して、arg2にデフォルト値を与えましょう。
arg1 = ARGV.shift
arg2 = ARGV.shift || 'default value goes here'
必要な引数をチェックするのは簡単です。
raise "missing argument" unless arg1
提供された引数が多すぎるかどうかも簡単に確認できます。
raise "too many arguments" unless ARGV.empty?
良い解決策がすでに与えられていることはわかっていますが、あなたの例がうまくいかなかった本当の理由については誰も言及していません。
サンプルコードの問題は、引数が指定されていない場合、ARGV[0]
が返されnil
、nil == false
falseになることです。nil
「偽」ですが、偽とは等しくありません。あなたができることは次のとおりです。
unless ARGV[0]
puts "Usage: ..."
exit 1
end
このステートメントは、実際のとの平等ではなく、偽りに依存しているため、これはうまくいきましたfalse
。
ただし、このコードは使用しないでください。実際の意図を述べると、はるかに明確になります。つまり、(最初の引数が偽であるかどうかではなく)引数があるかどうかを知りたいということです。したがって、他の人が提案したコードを使用してください。
if ARGV.empty?
puts "Usage..."
exit 1
end
ARGV [0](またはそれ以上の引数)が指定されているかどうかを確認するには、次のようにします。
puts 'Usage: ...' if ARGV.length == 0
ARGV.emptyを使用することもできますか?(@DaveNewtonの回答)
の長さを確認できますARGV
。要素がゼロの場合、ARGV[0]
指定されませんでした。
私はこれを行い、仕事をします:
url = ARGV[0]
if url.nil?
puts "The shell script needs the arguments."
exit
end
これが私がすることです:
a = 'defaultvalue' if (a = ARGV.shift).nil?
他の誰かがこれを提案しました:
a = ARGV.shift || 'defaultvalue'
これは間違っています。誤った値がdefaultvalue
割り当てられるためです。例:
args=[false]; a=args.shift||true; # a has final value true when it should be false