OptionParser::List
class OptionParser::List
父类:Object
简单的选项列表,提供从短和/或长选项字符串到OptionParser :: Switch的映射,以及从可接受参数到匹配模式和转换器对的映射。还提供汇总功能。
属性
atypeR
从可接受的参数类型映射到模式和转换器对。
listR
所有开关和摘要字符串的列表。
longR
从长式选项开关映射到实际的开关对象。
shortR
从短风格选项开关映射到实际开关对象。
公共类方法
new() Show source
只需初始化所有实例变量。
# File lib/optparse.rb, line 741
def initialize
@atype = {}
@short = OptionMap.new
@long = OptionMap.new
@list = []
end
公共实例方法
accept(t, pat = /.*/m, &block) Show source
请参阅OptionParser#accept。
# File lib/optparse.rb, line 751
def accept(t, pat = /.*/m, &block)
if pat
pat.respond_to?(:match) or
raise TypeError, "has no `match'", ParseError.filter_backtrace(caller(2))
else
pat = t if t.respond_to?(:match)
end
unless block
block = pat.method(:convert).to_proc if pat.respond_to?(:convert)
end
@atype[t] = [pat, block]
end
append(*args) Show source
附加switch
在列表的尾部,并关联短期,长期和否定的多头期权。参数是:
switch
OptionParser :: Switch实例被插入。
short_opts
短式选项列表。
long_opts
长式选项列表。
nolong_opts
带有“no-”前缀的长式选项列表。
append(switch, short_opts, long_opts, nolong_opts)
# File lib/optparse.rb, line 815
def append(*args)
update(*args)
@list.push(args[0])
end
complete(id, opt, icase = false, *pat, &block) Show source
搜索列表id
的opt
和完成的可选模式pat
。如果icase
是,则搜索不区分大小写。如果给出了块,结果会返回或产生。如果找不到,则返回nil。
# File lib/optparse.rb, line 837
def complete(id, opt, icase = false, *pat, &block)
__send__(id).complete(opt, icase, *pat, &block)
end
each_option(&block) Show source
迭代每个选项,将选项传递给block
。
# File lib/optparse.rb, line 844
def each_option(&block)
list.each(&block)
end
prepend(*args) Show source
插入switch
名单的头部,并将短的,长的和否定的长期选项联系起来。参数是:
switch
OptionParser :: Switch实例被插入。
short_opts
短式选项列表。
long_opts
长式选项列表。
nolong_opts
带有“no-”前缀的长式选项列表。
prepend(switch, short_opts, long_opts, nolong_opts)
# File lib/optparse.rb, line 799
def prepend(*args)
update(*args)
@list.unshift(args[0])
end
reject(t) Show source
请参阅OptionParser#拒绝。
# File lib/optparse.rb, line 767
def reject(t)
@atype.delete(t)
end
search(id, key) { |val| ... } Show source
key
在id
列表中搜索。如果给出了块,结果会返回或产生。如果找不到,则返回nil。
# File lib/optparse.rb, line 824
def search(id, key)
if list = __send__(id)
val = list.fetch(key) {return nil}
block_given? ? yield(val) : val
end
end
summarize(*args, &block) Show source
创建汇总表,将每行传递给block
(不含换行符)。参数args
传递给在每个选项上调用的汇总方法。
# File lib/optparse.rb, line 853
def summarize(*args, &block)
sum = []
list.reverse_each do |opt|
if opt.respond_to?(:summarize) # perhaps OptionParser::Switch
s = []
opt.summarize(*args) {|l| s << l}
sum.concat(s.reverse)
elsif !opt or opt.empty?
sum << ""
elsif opt.respond_to?(:each_line)
sum.concat([*opt.each_line].reverse)
else
sum.concat([*opt.each].reverse)
end
end
sum.reverse_each(&block)
end
私有实例方法
update(sw, sopts, lopts, nsw = nil, nlopts = nil) Show source
增加了sw
根据sopts
,lopts
和nlopts
。
sw
OptionParser :: Switch实例被添加。
sopts
短选项列表。
lopts
长选项列表。
nlopts
取消长时间选项列表。
# File lib/optparse.rb, line 779
def update(sw, sopts, lopts, nsw = nil, nlopts = nil)
sopts.each {|o| @short[o] = sw} if sopts
lopts.each {|o| @long[o] = sw} if lopts
nlopts.each {|o| @long[o] = nsw} if nsw and nlopts
used = @short.invert.update(@long.invert)
@list.delete_if {|o| Switch === o and !used[o]}
end