这是我的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
Run Code Online (Sandbox Code Playgroud)
这是输出:
C:\temp>ruby greet.rb help greet
Usage:
greet.rb greet [COMMAND]
Greet with a command
Run Code Online (Sandbox Code Playgroud)
如何让它看起来像这样?
C:\temp>ruby greet.rb help greet
Usage:
greet.rb greet [COMMAND]
--name Name to greet
Greet with a command
Run Code Online (Sandbox Code Playgroud)
小智 7
你有两件事在这里发生.首先,您已经为方法分配了--name,而不是整个CLI::Greet类.所以如果你使用命令:
ruby greet.rb greet help hi
Run Code Online (Sandbox Code Playgroud)
你得到
Usage:
greet.rb hi
Options:
[--name=NAME]
# Default: there
Say hi!
Run Code Online (Sandbox Code Playgroud)
哪个,是的,是错的 - 它在帮助中没有子命令.Thor中有一个错误提交.但是,它正确显示方法选项.
然而,您正在寻找的是一种类方法.这是为整个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
Run Code Online (Sandbox Code Playgroud)
有了这个,ruby greet.rb help greet回报
Usage:
greet.rb greet [COMMAND]
Options:
[--number=NUMBER]
# Default: 555-1212
Greet with a command
Run Code Online (Sandbox Code Playgroud)
注意这里还需要一个黑客攻击:tasks["greet"].options = CLI::Greet.class_options线路输入CLI::Root.雷神也有一个错误.
| 归档时间: |
|
| 查看次数: |
2612 次 |
| 最近记录: |