当前位置:  开发笔记 > 后端 > 正文

如何确定指定方法的起源类?

如何解决《如何确定指定方法的起源类?》经验,为你挑选了2个好方法。

我从这个讨论中得到了这个问题.方法调用object.m并不总是意味着"对象"类具有"m"方法,就像Array对象的find方法不是直接来自Array对象,而是来自混合的Enumerable模块.我的问题是,给定一种方法,我们如何确定方法起源的类?



1> Toby Hede..:

任何类/对象方法都是Ruby中的一个对象,并且有一些自己的方法.

所以你可以这样做:

[].method(:count).inspect
=> "#"

[].method(:detect).inspect
=> "#"

RegEx的快点,你已经完成了.



2> ben_h..:

tobyhede的答案很棒,但我只是做了一些挖掘irb而且没有必要切断输出#inspect.该Method

>> Object.new.method(:inspect)
=> #

有一些有用的方法:

>> Object.new.method(:inspect).methods - Object.methods
=> ["owner", "call", "to_proc", "unbind", "arity", "receiver", "[]"]

特别是该#owner方法,它将所有者作为适当的对象返回:

>> [].method(:count).owner
=> Array
>> [].method(:detect).owner
=> Enumerable

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有