Ruby 类和对象中的'singleton_class'方法是什么?
我在meta类中定义了方法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
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