gpt4 book ai didi

ruby - 在 Ruby 中禁用 OptionParser 标志的自动完成

转载 作者:数据小太阳 更新时间:2023-10-29 07:08:02 26 4
gpt4 key购买 nike

#!/usr/bin/env ruby

require 'optparse'

options = {}
OptionParser.new do |opts|
opts.on("--language LANGUAGE", ["Ruby", "JavaScript"]) do |language|
options[:language] = language
end
end.parse!

puts "Language: #{options[:language]}"

如果我用 ./bin/example --language Ru 运行它,它将输出:

Language: Ruby

我想禁用此自动完成/最接近的匹配行为,并在未提供确切名称时引发 OptionParser 但是我没有从他们的文档中看到执行此操作的方法。

有什么想法吗?

最佳答案

搜索设置在 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使用 method object 进行迭代&method(:each) 通过 & 作为 proc 传递。 方法对象Completion类上被调用。

candidates = candidate(key, icase, pat, &method(:each)).sort_by {|k, v, kn| kn.size}

block 迭代 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

迭代器每个 条目运行以下检查。我仍然没有 100% 理解这个检查,负责找到标志。

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

关于ruby - 在 Ruby 中禁用 OptionParser 标志的自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55501978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com