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