Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何列出对象类的实例方法而不列出超类的方法_Ruby - Fatal编程技术网

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中,有些方法实际上是在
内核
上定义的,但在
对象
上记录的,这可能会让人混淆。)