Ruby 模块中的“基础”是啥?
Posted
技术标签:
【中文标题】Ruby 模块中的“基础”是啥?【英文标题】: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 forincluded
吗?
文档说关注中的included
也有一个base
参数,但是当我尝试像included(base) do ...
apidock.com/rails/ActiveSupport/Concern/included 一样调用它时,我收到一条错误消息
NameError(ConcernModule:Module 的未定义局部变量或方法“基”)。谢谢。
请发表您的疑虑、您如何将您的疑虑纳入课堂以及您收到的错误消息。
【参考方案1】:
Module#included
是 一个回调,它从 Module#include
调用,显式地将 self
作为参数传递给方法。
【讨论】:
以上是关于Ruby 模块中的“基础”是啥?的主要内容,如果未能解决你的问题,请参考以下文章