首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变量在Thor desc中

变量在Thor desc中
EN

Stack Overflow用户
提问于 2015-11-24 15:27:06
回答 1查看 282关注 0票数 0

对于cli项目,我希望有一个与thor任务共享的超类。当调用“帮助”子命令时,它应该使用自定义描述公开共享命令。

我想出了下面的代码,但是变量@复数在描述中没有被替换。

这是可能的托尔和一些元编程吗?

代码语言:javascript
复制
module MyModule
  class ResourceSubcommand < Thor

    def initialize(*args)
      super
    end

    desc "list", "list all #{@plural}"
    def list
      list_object(@default_list_columns)
    end
  end
end

module MyModule
  class Account < MyModule::ResourceSubcommand

    def initialize(*args)
      super
      @plural = 'accounts'
    end

  end
end

module MyModule
  class Commands < Thor

    desc "account SUBCOMMAND ...ARGS", "manage Exact Online accounts"
    subcommand "account", Account

  end
end

运行$ thorcli account help应该输出:

代码语言:javascript
复制
Commands:
  thorcli account help [COMMAND]     # Describe subcommands or one specific subcommand
  thorcli account list               # list all accounts
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-24 15:58:56

传递给desc的字符串是在的上下文中计算的,但是initialize方法是在实例的上下文中计算的,因此两个@plural属于两个不同的对象。

此外,在定义超类desc时会立即调用MyModule::ResourceSubcommand,并且在继承超类并设置子类中的@plural之后,没有一种简单的方法来推迟它的评估,您的目标似乎很难实现。

我尝试过重写MyModule::ResourceSubcommand::inheritedMyModule::ResourceSubcommand.singleton_class::inherited,但是失败了。也许您可以将MyModule::ResourceSubcommand定义为一个模块,重写它的self.included,并在设置@plural之后在子类中包含它。

更新

我终于成功了。这是我的解决方案:

代码语言:javascript
复制
module MyModule

  # Change from class to module
  module ResourceSubcommand

    # A hook called when this module is included by other modules
    def self.included(base)
      base.class_eval do
        desc "list", "list all #{@plural}"
        def list
          list_object(@default_list_columns)
        end
      end
    end
  end
end

module MyModule

  # No inheritance
  class Account

    # Don't put this in any instance methods, including #initialize
    @plural = 'accounts'

    # Be sure to include after @plural is set
    include ResourceSubcommand
  end
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33897536

复制
相关文章

相似问题

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