首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让Thor显示选项?

如何让Thor显示选项?
EN

Stack Overflow用户
提问于 2012-08-01 21:47:44
回答 1查看 2.8K关注 0票数 5

这是我的Ruby代码:

代码语言:javascript
复制
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

这是输出:

代码语言:javascript
复制
C:\temp>ruby greet.rb help greet
Usage:
  greet.rb greet [COMMAND]

Greet with a command

我怎么才能让它看起来像这样?

代码语言:javascript
复制
C:\temp>ruby greet.rb help greet
Usage:
  greet.rb greet [COMMAND]
    --name Name to greet

Greet with a command
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-02 04:29:31

这里有两件事要做。首先,您将--name赋给了一个方法,而不是整个CLI::Greet类。因此,如果您使用以下命令:

代码语言:javascript
复制
ruby greet.rb greet help hi

你会得到

代码语言:javascript
复制
Usage:
  greet.rb hi

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

Say hi!

是的,这是错误的--它在帮助中没有子命令。在《雷神》中有一个bug为这个问题提交了文件。但是,它正确地显示了方法选项。

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

你可以这样做:

代码语言:javascript
复制
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就会返回

代码语言:javascript
复制
Usage:
  greet.rb greet [COMMAND]

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

Greet with a command

注意,这里仍然需要一个技巧:CLI::Root中的tasks["greet"].options = CLI::Greet.class_options行。在《雷神》中也有一个bug为此提交的文件。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11760708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档