gpt4 book ai didi

ruby - 为什么模块的 'self'方法不能成为类的单例方法?

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

module Test
def self.model_method
puts "this is a module method"
end
end

class A
include Test
end

A.model_method

这将是错误的:

undefined method `model_method' for A:Class (NoMethodError)

但是当我使用 A 的元类时,它起作用了:

module Test
def model_method
puts "this is a module method"
end
end

class A
class << self
include Test
end
end

A.model_method

谁能解释一下?

最佳答案

如果你想在包含模块时将类方法和实例方法混合到一个类中,你可以遵循以下模式:

module YourModule
module ClassMethods
def a_class_method
puts "I'm a class method"
end
end

def an_instance_method
puts "I'm an instance method"
end

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

class Whatever
include YourModule
end

Whatever.a_class_method
# => I'm a class method

Whatever.new.an_instance_method
# => I'm an instance method

基本上是为了过度简化它,您扩展 以添加类方法,您include 以添加实例方法。当一个模块被包含时,它的 #included 方法被调用,它被包含在实际的类中。从这里你可以 extend 使用来自另一个模块的一些类方法的类.这是一种很常见的模式。

另请参阅:http://api.rubyonrails.org/classes/ActiveSupport/Concern.html

关于ruby - 为什么模块的 'self'方法不能成为类的单例方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10039039/

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