红宝石。定义了哪个类的方法?

时间:2013-03-09 14:00:15

标签: methods where defined

你们知道是否可以了解定义方法的类别?

例如,

to_a可能在Enumerable和Numeric或其他地方定义。是否有一个函数,比如类对象:

=> aaa=[1,2,3,4,5]
=> aaa.class
=> Array

是否有类似“defined_in?”的方法要了解哪个类定义了一个方法?

=> to_a.defined_in?

1 个答案:

答案 0 :(得分:0)

在Ruby 1.9及更高版本中,您可以使用Method#source_location。在Ruby 1.8上,有一个gem ruby18_source_location向后移植这个功能。

有关进一步分析源代码的方法(包括调试器)的详细讨论,请参阅https://stackoverflow.com/a/13015691/260122以及同一问题的其他答案。


编辑:对不起,我误解了你的问题。要找出定义方法的类或模块,请使用Method#owner。如:

> %w(a a a).method(:to_a).owner
=> Array