模块 OptionParser::Arguable

扩展命令行参数数组 (ARGV) 以解析自身。

公共类方法

extend_object(obj) 点击以切换源代码

初始化实例变量。

调用超类方法
# File optparse.rb, line 2403
def self.extend_object(obj)
  super
  obj.instance_eval {@optparse = nil}
end

公共实例方法

getopts(*args, symbolize_names: false, **keywords) 点击以切换源代码

可以进行如下的 getopts 替换。另请参见 OptionParser#getopts

def getopts(*args)
  ($OPT = ARGV.getopts(*args)).each do |opt, val|
    eval "$OPT_#{opt.gsub(/[^A-Za-z0-9_]/, '_')} = val"
  end
rescue OptionParser::ParseError
end
# File optparse.rb, line 2396
def getopts(*args, symbolize_names: false, **keywords)
  options.getopts(self, *args, symbolize_names: symbolize_names, **keywords)
end
options() { |optparse| ... } 点击以切换源代码

实际的 OptionParser 对象,如果不存在则自动创建。

如果使用代码块调用,则生成 OptionParser 对象并返回代码块的结果。如果在代码块中发生 OptionParser::ParseError 异常,则会捕获该异常,将错误消息打印到 STDERR 并返回 nil

# File optparse.rb, line 2355
def options
  @optparse ||= OptionParser.new
  @optparse.default_argv = self
  block_given? or return @optparse
  begin
    yield @optparse
  rescue ParseError
    @optparse.warn $!
    nil
  end
end
options=(opt) 点击以切换源代码

设置 OptionParser 对象,当 optfalsenil 时,方法 OptionParser::Arguable#optionsOptionParser::Arguable#options= 将未定义。因此,无法通过接收器对象访问 OptionParser 对象。

# File optparse.rb, line 2338
def options=(opt)
  unless @optparse = opt
    class << self
      undef_method(:options)
      undef_method(:options=)
    end
  end
end
order!(**keywords, &blk) 点击以切换源代码

按顺序破坏性地解析 self 并返回包含剩余未解析参数的 self

# File optparse.rb, line 2371
def order!(**keywords, &blk) options.order!(self, **keywords, &blk) end
parse!(**keywords) 点击以切换源代码

破坏性地解析 self 并返回包含剩余未解析参数的 self

# File optparse.rb, line 2383
def parse!(**keywords) options.parse!(self, **keywords) end
permute!(**keywords) 点击以切换源代码

以排列模式破坏性地解析 self 并返回包含剩余未解析参数的 self

# File optparse.rb, line 2377
def permute!(**keywords) options.permute!(self, **keywords) end