【问题标题】:why won't Ruby OptionParser read all of my arguments?为什么 Ruby OptionParser 不读取我的所有论点?
【发布时间】:2013-09-10 18:59:28
【问题描述】:

这是我的代码:

#!/usr/bin/env ruby
# OptionParser
require 'optparse'

options = {}
optparse = OptionParser.new do|opts|
    opts.banner = '...'

    # This option inputs ...
    options[:Lap1] = []
    opts.on('-1', '--Lap1 filepath1,width1,height1,a1,first1,last1', String, '...') do|l1|
        options[:Lap1] = l1.split(',')  
    end
end
optparse.parse!

我的目标是使用逗号分隔的单独输入数组。但是这段代码只输出第一个变量$filepath1

输出:

puts(options[:Lap1])

puts(options[:Lap1][0]

只是第一个变量filepath1

puts(options[:Lap1][1])

nil,应该是变量width1

任何建议或可能的修复都会有所帮助,谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby split optionparser


    【解决方案1】:

    你需要调用解析!声明所有选项后,在您的 OptionParser 对象上使用方法。

    optparse.parse!
    

    【讨论】:

    • 我有,我忘了在问题上添加它,对不起。
    【解决方案2】:

    我会以不同的方式编写该代码:

    require 'optparse'
    require 'pp'
    
    options = {
      :Lap1 => []
    }
    
    optparse = OptionParser.new do |opts|
      opts.banner = '...'
    
      # This option inputs ...
      opts.on(
        '-1', '--Lap1 filepath1,width1,height1,a1,first1,last1',
        Array,
        '...'
      ) { |l1| options[:Lap1] = l1 }
    end.parse!
    pp options
    

    在命令行运行:

    ruby test.rb -1 filepath1,width1,height1,a1,first1,last1
    

    结果:

    {:Lap1=>["filepath1", "width1", "height1", "a1", "first1", "last1"]}
    

    使用--Lap1 进行测试会导致:

    ruby test.rb --Lap1 filepath1,width1,height1,a1,first1,last1
    

    还有:

    {:Lap1=>["filepath1", "width1", "height1", "a1", "first1", "last1"]}
    

    在我看来,您应该在定义 options 哈希时设置默认值。

    options = {
      :Lap1 => []
    }
    

    另外,请注意使用Array 而不是String。如果您使用 Array,OptionParser 将自动将逗号分隔的字符串拆分为单个元素的数组,从而节省您的 split 步骤,并避免一些混乱的代码。有关详细信息,请参阅 OptionParser 的 make_switch 方法的文档。

    【讨论】:

    • 所以,即使这样做,我仍然会遇到同样的错误。它似乎只读取第一个变量。
    • 好吧,我不知道你是如何从命令行调用代码的,因为你没有说。上面的命令行与我给出的代码一起正常工作。
    • 我就是这样运行的。几天前它还在工作,但现在我一直遇到这个问题。
    • 那么您的系统发生了一些变化。给出的命令行是有效且正确的。确认您的 Ruby 版本正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2012-04-19
    相关资源
    最近更新 更多