Ruby 类和对象中的'singleton_class'方法是什么?

Ruby 类和对象中的'singleton_class'方法是什么?,ruby,metaclass,Ruby,Metaclass,我在meta类中定义了方法specific_data1和specific_data2,并希望这些方法属于singleton类: 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

我在meta类中定义了方法
specific_data1
specific_data2
,并希望这些方法属于singleton类:

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\u方法是什么,以及它是如何有用的。

Object\35; 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]

您定义的两个方法都被定义为singleton_类上的实例方法

User.singleton_class.instance_methods(false)
# => [:specific_data1, :specific_data2]

Jorg答对了你问题的技术部分。你想检查一下吗

User.singleton_class.instance_methods
至于这个

请帮助我了解
User
类上的
singleton\u方法是什么,以及它是如何有用的。”

假设您有一个对象
x
,您想为它定义一个方法。一种方法是在
x
的类中定义该方法,但这会产生为该类的所有其他对象定义该方法的副作用!如果您只想为单个对象
x
定义该方法,该怎么办


Ruby通过让您创建一个只有一个实例的类来解决这个问题:
x
。这是singleton类。其中定义的方法只会影响
x
,因为singleton类是
x.class
的子类,它唯一的实例是
x
。singleton方法只是定义的常规方法在单例类中。

你是对的,但我关心的是为什么它们不出现在单例类对象上。它们不属于单例类(元类)吗它们是singleton类的实例方法,这意味着它们是singleton类的实例方法,也就是说,它们是
用户
的方法。它实际上与任何其他类一样工作。
字符串
的实例方法是
字符串
的实例方法,而不是
字符串
类本身。您可以
split
String
的一个实例,您不能
拆分
String
类。等等。因此User.singleton\u类方法返回what,返回
用户的singleton类。
User.singleton_class.instance_methods