搜索设置在
self.regexp
中定义。
方法
complete
似乎返回所有不同的标志。
方法
self.regexp
定义了所使用的搜索查询。
class OptionParser
module Completion
def self.regexp(key, icase)
Regexp.new('\A' + Regexp.quote(key).gsub(/\w+\b/, '\&\w*'), icase)
end
end
end
正则表达式是使用以下标志构建的
\A
从字符串开头搜索
\w*
搜索任何匹配字符
candidate
迭代使用作为 proc
传递的 方法对象 &method(:each)
。 方法对象
在 Completion
类上调用。
candidates = candidate(key, icase, pat, &method(:each)).sort_by {|k, v, kn| kn.size}
该块迭代
在self.candidate
内部进行。
def self.candidate(key, icase = false, pat = nil, &block)
pat ||= Completion.regexp(key, icase)
candidates = []
block.call do |k, *v|
// Search and add candidates
end
candidates
end
迭代器对每个条目运行以下检查。我仍然没有完全理解这个检查,它负责查找标志。
block.call do |k, *v|
(if Regexp === k
kn = ""
k === key
else
kn = defined?(k.id2name) ? k.id2name : k
pat === kn
end) or next
v << k if v.empty?
candidates << [k, v, kn]
end
candidates
complete
方法创建一个别名就可以解决这个问题。 - ForeverZer0