gpt4 book ai didi

ruby - 如何让 Thor 显示选项?

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

这是我的 Ruby 代码:

require 'thor'
require 'thor/group'

module CLI

class Greet < Thor
desc 'hi', 'Say hi!'
method_option :name, :type => :string, :description => 'Name to greet', :default => 'there'
def hi
puts "Hi, #{options[:name]}!"
end

desc 'bye', 'say bye!'
def bye
puts "Bye!"
end
end


class Root < Thor
register CLI::Greet, 'greet', 'greet [COMMAND]', 'Greet with a command'
end
end


CLI::Root.start

这是输出:

C:\temp>ruby greet.rb help greet
Usage:
greet.rb greet [COMMAND]

Greet with a command

如何让它看起来像这样?

C:\temp>ruby greet.rb help greet
Usage:
greet.rb greet [COMMAND]
--name Name to greet

Greet with a command

最佳答案

这里发生了两件事。首先,您已将 --name 分配给一个方法,而不是整个 CLI::Greet 类。所以如果你使用命令:

ruby greet.rb greet help hi

你得到了

Usage:
greet.rb hi

Options:
[--name=NAME]
# Default: there

Say hi!

是的,这是错误的——它在帮助中没有子命令。有一个 bug在雷神中提交了这个。但是,它正确显示了方法选项。

然而,您正在寻找的似乎是一个类方法。这是为整个 CLI::Greet 类定义的方法,而不仅仅是为 #hi 方法定义的方法。

你会这样做:

require 'thor'
require 'thor/group'

module CLI

class Greet < Thor
desc 'hi', 'Say hi!'
class_option :number, :type => :string, :description => 'Number to call', :default => '555-1212'
method_option :name, :type => :string, :description => 'Name to greet', :default => 'there'
def hi
puts "Hi, #{options[:name]}! Call me at #{options[:number]}"
end

desc 'bye', 'say bye!'
def bye
puts "Bye! Call me at #{options[:number]}"
end
end

class Root < Thor
register CLI::Greet, 'greet', 'greet [COMMAND]', 'Greet with a command'
tasks["greet"].options = CLI::Greet.class_options
end
end

CLI::Root.start

有了这个,ruby greet.rb help greet 返回

Usage:
greet.rb greet [COMMAND]

Options:
[--number=NUMBER]
# Default: 555-1212

Greet with a command

请注意,这里仍然需要 hack:CLI::Root 中的 tasks["greet"].options = CLI::Greet.class_options 行。有一个 bug也在雷神中申请了这个。

关于ruby - 如何让 Thor 显示选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11760708/

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