Ruby 如何列出对象类的实例方法而不列出超类的方法
方法Ruby 如何列出对象类的实例方法而不列出超类的方法,ruby,Ruby,方法methods返回一个类中所有方法的列表,例如,如果我调用'miguel.methods,我将获得类字符串中所有方法的列表 我想列出一个类的方法,不包括它的超类的方法。例如,在String上定义的实例方法列表,包括String中包含的模块 我还想知道如何列出在对象类上专门定义的实例方法,而不列出该类包含的模块中包含的实例方法。尝试以下方法: class.instance_methods(false) 下面以字符串为例: 'miguel'.class.instance_methods(fal
methods
返回一个类中所有方法的列表,例如,如果我调用'miguel.methods
,我将获得类字符串中所有方法的列表
我想列出一个类的方法,不包括它的超类的方法。例如,在String
上定义的实例方法列表,包括String
中包含的模块
我还想知道如何列出在对象类上专门定义的实例方法,而不列出该类包含的模块中包含的实例方法。尝试以下方法:
class.instance_methods(false)
下面以字符串为例:
'miguel'.class.instance_methods(false)
这是否包括由类String
中包含的模块定义的方法?@miguelsala不,不包括(请尝试一下)。另一方面,它也不包括单例方法#⇒无
。也就是说,此调用不会返回在实例本身上定义的方法。@mudasobwa yes,这就是@Stefan对属于singleton类的singleton方法的含义。顺便说一句,人们用许多名字来称呼“匿名类”,在这种情况下,singleton类、eigenclass、ghost类(Dave Thomas)和anonymous类都是同义词。@AshikSalman差不多,但在这个问题中,接收者是一个实例(例如,'miguel'
),在另一个问题中,它是类本身(例如,字符串
)。如果您能解释一下关于对象#方法
的文档中您不清楚的地方,这将是非常有帮助的,这样Ruby开发人员就可以为将来的用户改进文档。@JörgWMittag可能是因为方法的名称:方法
,但我找不到它的定义位置。感谢您指向它,我应该猜它在对象中
如果您想知道方法的定义位置,您可以问它:'.method(:methods).owner
。Ruby-Doc.Org网站上还有一个搜索功能,可以让您搜索方法。(这很方便,因为在生成文档的YARV中,有些方法实际上是在内核
上定义的,但在对象
上记录的,这可能会让人混淆。)