Ruby代码中extended方法作用、Klass来源及未调用却生效的疑问
关于Ruby模块中
extended方法的作用及相关疑问解答 一、extended方法的作用
这段代码是Ruby模块的钩子方法,定义在模块的单例类中,核心作用是:当当前模块被某个类通过extend方式混入时,自动执行该方法,并为被混入的类动态添加实例方法supported_attrs。
supported_attrs的具体逻辑:
- 获取当前实例所属的类(
that_klass = self.class) - 检查该类是否定义了
ATTRS常量:存在则返回常量值,不存在则返回空数组[]
二、klass参数的来源
klass就是被混入该模块的目标类。当其他类执行extend 该模块的操作时,Ruby解释器会自动把这个目标类作为参数传递给extended方法,完全不需要手动传入。
三、为何未显式调用extended却有方法生效
Ruby模块内置了一系列钩子方法,extended是其中之一——它不需要开发者显式调用,只要有类通过extend方式混入该模块,Ruby就会自动触发这个方法。项目里必然存在其他类执行了类似extend AttrsLoadable(假设该模块名为AttrsLoadable)的代码,这一操作触发了extended,进而动态生成了supported_attrs方法。
内容的提问来源于stack exchange,提问作者Irina
相关产品推荐
相关产品推荐

