gpt4 book ai didi

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

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

我想访问 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:in '<main>': undefined method 'create_file' for 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 习惯用法,它使用混合在其包含器上定义类方法(与实例方法相对)。

举个例子,

[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__'

但是如果你继承 Klassinclude Klass::Mod included 回调 extends 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

起初我花了一些时间才弄清楚,所以不要难过,不,这不是那么简单或明显。

关于ruby - 如何在不需要 Thor CLI 应用程序的情况下使用 Thor 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17332255/

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