如何使用 OptionParser 将空字符串传递到命令行

Ehu*_*Lev 1 ruby

我正在尝试编写一个脚本来获取一些参数,其中一些参数可能为空。

Ruby 的 OptionParser 似乎不允许这样做并抛出 (OptionParser::InvalidArgument)

代码:

require 'optparse'

options = {}
OptionParser.new do |opt|

  opt.on('--might_be_empty might_be_empty', String) { |o| options[:might_be_empty] = o }

end.parse!

puts "might_be_empty: #{options[:might_be_empty]}"
Run Code Online (Sandbox Code Playgroud)

快乐流:

ruby ./for_stack.rb --might_be_empty "some_real_data"
might_be_empty: some_real_data
Run Code Online (Sandbox Code Playgroud)

当值为空时:

ruby ./for_stack.rb --might_be_empty ""
./for_stack.rb:10:in `<main>': invalid argument: --might_be_empty  (OptionParser::InvalidArgument)
Run Code Online (Sandbox Code Playgroud)

我如何告诉 OptionParser 允许空字符串?

Cas*_*per 5

不指定强制类型,或使用Object代替String。两者的行为相同。

opt.on('--might_be_empty might_be_empty') { ... }
# ..or
opt.on('--might_be_empty might_be_empty', Object) { ... }
Run Code Online (Sandbox Code Playgroud)

测试:

ruby ./for_stack.rb --might_be_empty "some_real_data"
might_be_empty: some_real_data

ruby ./for_stack.rb --might_be_empty ""
might_be_empty: 
Run Code Online (Sandbox Code Playgroud)