在Ruby中访问单例类方法中的私有方法

在Ruby中访问单例类方法中的私有方法,ruby,Ruby,如果我有一个与此类似的ruby类: class-MyClass def self.singleton_方法 你有什么私事吗 结束 私有的 你有什么私事吗 把“做一些私人的事” 结束 结束 我调用MyClass.singleton\u方法 然后我得到这个错误: NoMethodError (undefined method `do_something_private' for MyClass:Class): 我们如何解决这个错误?定义可以从类方法内部调用的私有方法的正确方法是什么?这是因为do

如果我有一个与此类似的ruby类:

class-MyClass
def self.singleton_方法
你有什么私事吗
结束
私有的
你有什么私事吗
把“做一些私人的事”
结束
结束
我调用
MyClass.singleton\u方法

然后我得到这个错误:

NoMethodError (undefined method `do_something_private' for MyClass:Class):

我们如何解决这个错误?定义可以从类方法内部调用的私有方法的正确方法是什么?

这是因为
do\u something\u private
被定义为
MyClass
的实例方法。将其更改为类方法:

def self.do_something_private
  # do something private
end
值得一读的是:

注意,private对类方法没有任何作用,它只使实例方法私有。你需要私有的类方法定义self.do\u一些私有的东西。。。相反


这是因为
do\u something\u private
被定义为
MyClass
的实例方法。将其更改为类方法:

def self.do_something_private
  # do something private
end
值得一读的是:

注意,private对类方法没有任何作用,它只使实例方法私有。你需要私有的类方法定义self.do\u一些私有的东西。。。相反


这里的问题是,您正在从类方法调用实例方法。如果将
self
添加到私有方法中,它将成为类方法,并且可以通过类名调用。 尝试
self.do\u something\u private

这里的问题是您正在从类方法调用实例方法。如果将
self
添加到私有方法中,它将成为类方法,并且可以通过类名调用。 尝试
self.do\u something\u private

当调用
do\u something\u private
时,self是
MyClass
,但没有(类)方法
MyClass::do\u something\u private
,因此出现错误消息。您的
do\u something\u private
是一个实例方法。“定义可以从类方法内部调用的私有方法的正确方法是什么?”出于显而易见的原因,不能从类方法调用实例方法,不管它们是私有的、公共的还是其他的。这不是真正的“单例方法”,它是一个类方法。是的,类的singleton类上的实例方法与类方法相同,但当调用
Dou some\u private
时,这些方法通常不被称为“singleton方法”
self
is
MyClass
,但没有(类)方法
MyClass::do\u something\u private
,因此出现错误消息。您的
do\u something\u private
是一个实例方法。“定义可以从类方法内部调用的私有方法的正确方法是什么?”由于显而易见的原因,人们不能从类方法调用实例方法,不管它们是私有的、公共的还是其他的。这不是真正的“单例方法”,而是类方法。是的,类的单例类上的实例方法与类方法相同,但它们通常不被称为“单例方法”请注意,
private
不为类方法做任何事情,它只会使实例方法成为私有的。您需要
private\u class\u method def self.do\u something\u private…
来代替。或者您可以在
class中将类方法定义为实例方法。请注意,
private
不为类方法做任何事情,它只是使实例方法私有。您需要
private\u class\u method def self.do\u something\u private…
。或者您可以将类方法定义为
类中的实例方法