加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 如何在不需要Thor CLI应用程序的情况下使用Thor操作?

发布时间:2020-12-17 03:55:15 所属栏目:百科 来源:网络整理
导读:Thor :: Actions( http://textmate.rubyforge.org/thor/Thor/Actions.html)有一些很棒的帮助方法我想访问但是如果不使用Thor CLI应用程序我似乎无法使用它们. 我试过简单地说: require "rubygems"require "thor"Thor::Actions.create_file "foo.txt","conte
Thor :: Actions( http://textmate.rubyforge.org/thor/Thor/Actions.html)有一些很棒的帮助方法我想访问但是如果不使用Thor CLI应用程序我似乎无法使用它们.

我试过简单地说:

require "rubygems"
require "thor"

Thor::Actions.create_file "foo.txt","contents"

哪个投掷:

run.rb:4:在’< main>‘中:未定义方法’create_file’用于Thor :: Actions:Module(NoMethodError)

我意识到我可能会遗漏一些非常简单的东西.谢谢.

解决方法

Thor打算让你的类继承Thor类.然后Thor类包含并扩展模块,允许它们的方法成为类方法.如果您查看源代码,例如Actions.rb,您将看到我的意思:

# thor/lib/thor/actions.rb

class Thor
  module Actions

    # this is the interesting part and answers your question
    def self.included(base) #:nodoc:
      base.extend ClassMethods
    end

    module ClassMethods

这是一个常见的Ruby习语,它使用mixin在其包含器上定义类方法(而不是实例方法).

举个例子,

[2] pry(main)> class Klass
[2] pry(main)*   module Mod  
[2] pry(main)*     def self.included(base)    
[2] pry(main)*       base.extend ClassMethods      
[2] pry(main)*     end  
[2] pry(main)*     module ClassMethods    
[2] pry(main)*       def act_as_class_method      
[2] pry(main)*         puts "Im a class method now!!!"        
[2] pry(main)*       end  
[2] pry(main)*     end  
[2] pry(main)*   end  
[2] pry(main)* end  
=> nil

现在打电话

Klass::Mod.act_as_class_method

导致你遇到同样的错误

NoMethodError: undefined method `act_as_class_method' for Klass::Mod:Module
from (pry):26:in `__pry__'

但是如果你继承Klass并包含Klass :: Mod,那么包含的回调会扩展ClassMethod模块,让你使用ClassMethods中定义的方法作为类方法

[4] pry(main)> class Example < Klass
[4] pry(main)*   include Klass::Mod

[4] pry(main)*   self.act_as_class_method
[4] pry(main)* end  

=> Im a class method now!!!
=> nil

这花了我一段时间才弄清楚,所以不要感觉不好,不要,它不是那么简单或明显.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读