【问题标题】:What is "base" in a Ruby Module?Ruby 模块中的“基础”是什么?
【发布时间】:2020-05-11 23:08:17
【问题描述】:

随着

def self.included(base)
end

钩子可以从included钩子内部访问包含类。到目前为止,我知道模块。但是我不是将base 作为参数传递给钩子吗?这是否意味着它也应该作为某种模块变量在整个Module 中可用,并且在模块中预先存在钩子?

它显然没有定义为类变量 (Module.class_variables)、实例变量 (Module.instance_variables) 或常量,因为它是小写的。

那么base 参数是什么?当你将它作为参数传递给模块钩子时,它只是“被召唤存在”吗?

@spickermann

2.6.0 :001 > module ConcernModule
2.6.0 :002?>   extend ActiveSupport::Concern
2.6.0 :003?>   included(base) do
2.6.0 :004 >       puts "base is #{base}"
2.6.0 :005?>     end
2.6.0 :006?>   end


Traceback (most recent call last):
        2: from (irb):1
        1: from (irb):3:in `<module:ConcernModule>'
NameError (undefined local variable or method `base' for ConcernModule:Module)

谢谢

【问题讨论】:

  • 你看过docs for included吗?
  • 文档说关注中的included 也有一个base 参数,但是当我尝试像included(base) do ... apidock.com/rails/ActiveSupport/Concern/included 一样调用它时,我收到一条错误消息
  • NameError(ConcernModule:Module 的未定义局部变量或方法“基”)。谢谢。
  • 请发表您的疑虑、您如何将您的疑虑纳入课堂以及您收到的错误消息。

标签: ruby-on-rails ruby module


【解决方案1】:

Module#included一个回调,它从 Module#include 调用,显式地将 self 作为参数传递给方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    相关资源
    最近更新 更多