gpt4 book ai didi

ruby-on-rails - 嵌套模块和方法 Hook

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:31 28 4
gpt4 key购买 nike

我是 ruby(java 背景)的新手,所以如果这是一个非常愚蠢的问题,我很抱歉。

我正在学习一些关于模块的教程,它们看起来有点类似于静态类。我无法理解的一点是为什么你会做如下的事情:

module ExampleModule

def self.included(base)
base.extend(ClassMethods)
end

module ClassMethods
def myMethod
end
end
end

为什么不直接将 ClassMethods 中的方法放入 ExampleModule 并保存添加方法 Hook 。我确定我错过了一些非常基本的东西,但我已经做了一段时间了,所以我觉得有必要问一下。

最佳答案

这是一个 ruby 习语。当您想要一个模块时,它很有用:

  • 向类中添加一些实例方法
  • 同时添加类方法/像Java静态方法/

同时

例子:

module ExampleModule
def self.included(base)
puts 'included'
base.extend(ClassMethods)
end

def foo
puts 'foo!'
end

module ClassMethods
def bar
puts 'bar!'
end
end
end

class ExampleClass
include ExampleModule
end

ExampleClass.bar

ExampleClass.new.foo

如果你只想添加类方法,你不需要这个习惯用法,你可以只添加一个方法到你的模块并“扩展”它而不是包含它。

在 Rails 上,这个习惯用法已经过时,您应该改用 ActiveSupport::Concern。

关于ruby-on-rails - 嵌套模块和方法 Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14601867/

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