gpt4 book ai didi

ruby - 为什么人们在模块定义中使用扩展?

转载 作者:数据小太阳 更新时间:2023-10-29 08:34:12 24 4
gpt4 key购买 nike

例如,rubygem Deviselib/devise/controllers/helpers.rb

中有如下一段代码
    module Helpers
extend ActiveSupport::Concern

这里为什么要用extendinclude 会做同样的事情吗?

最佳答案

不,include 不会做同样的事情。

extendinclude 执行类似但不同的角色。 include 获取包含模块的实例方法,并使它们可用于包含模块的实例。实际上,include 将包含的模块作为 including 的父类(super class)插入(事实上,#ancestors 甚至会显示包含的模块)。

另一方面,

extend 将命名模块的方法添加到接收器。在模块定义期间调用 extend 的情况下,这意味着“扩展”模块的实例方法将成为“扩展”模块的类方法。它通常用于将装饰器(实际上只是对类方法的调用)导入到正在定义的类或模块中。

因此,简而言之,上面的代码片段将采用 ActiveSupport::Concern 的实例方法,并使它们成为 Helpers 的类方法。

关于ruby - 为什么人们在模块定义中使用扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6787876/

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