你们知道是否可以了解定义方法的类别?
例如,
to_a可能在Enumerable和Numeric或其他地方定义。是否有一个函数,比如类对象:
=> aaa=[1,2,3,4,5]
=> aaa.class
=> Array
是否有类似“defined_in?”的方法要了解哪个类定义了一个方法?
=> to_a.defined_in?
答案 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