gpt4 book ai didi

ruby - 类和对象中的 `singleton_class` 方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:57 25 4
gpt4 key购买 nike

我在元类中定义了方法specific_data1specific_data2,并期望这些方法属于单例类:

class User
def User.specific_data1
"user specific data defined on user"
end
class << self
def specific_data2
"user specific data defined in meta class"
end
end
end

但是这两种方法都没有在:

User.singleton_class.methods

请帮助我理解 User 类上的 singleton_method 是什么以及它有什么用。

最佳答案

Object#methods 返回该对象的方法。类中定义的方法不是该类对象的方法,而是该类实例的方法。

这与单例类无关,对所有类都是如此:

class Foo
def bar; end
end

Foo.methods.include?(:bar)
# => false

Foo.new.methods.include?(:bar)
# => true

Foo.instance_methods
# => [:bar]

以下是您的示例的工作方式:

User.methods.grep(/specific/)
# => [:specific_data1, :specific_data2]

User.singleton_methods
# => [:specific_data1, :specific_data2]

User.singleton_class.instance_methods.grep(/specific/)
# => [:specific_data1, :specific_data2]

关于ruby - 类和对象中的 `singleton_class` 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30937228/

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