我读到了这个:
让我们从一个简单的Ruby程序开始吧。我们会写一个方法 返回一个愉快,个性化的问候。
def say_goodnight(name) result = "Goodnight, " + name return result end
我的理解是方法是在类中定义的函数或子例程,它可以与类(类方法)或对象(实例方法)相关联。
那么,如果没有在类中定义它,那该怎么办呢?
答案 0 :(得分:11)
当您以这种方式在全局范围内在Ruby中定义函数时,它在技术上成为private
类的Object
方法,它是Ruby中所有内容的基类。 Everything in Ruby is an object,所以确定一个方法确实如此。
def say_goodnight(name)
result = "Goodnight, " + name
return result
end
Object.private_methods.include? :say_goodnight
=> true
因为它被定义为在private
上具有Object
可见性的方法,所以它只能在其定义的类或子类的对象内部调用。那为什么它似乎在全球范围内可用呢?
基本上,Ruby程序本身定义了一个名为Object
的{{1}}实例,它作为定义方法的顶级范围。因此,如果您认为您的程序在 main
内运行(main
),则可以使用其私有方法。
Object
<强>附录:强>
This answer进一步解释了如何定义和实施# In irb:
self
=> main
self.class
=> Object
self.private_methods.include? :say_goodnight
=> true
。