赞 | 0 |
VIP | 17 |
好人卡 | 0 |
积分 | 1 |
经验 | 1022914 |
最后登录 | 2017-2-4 |
在线时间 | 10 小时 |
Lv1.梦旅人 月下可怜人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 10 小时
- 注册时间
- 2005-11-23
- 帖子
- 4085
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
在做梦幻麻将馆时,将一个大类切成了十来个部分,又是断断续续进行,加之上了岁数,脑袋不灵光,总装不下写的那些方法都放在哪里,于是弄了这个东西.
class Object
def find_name(*args)
p find_method(*args)
end
def find_method(*method_names)
return self.singleton_methods(false).inject([]) do |result, method|
result.push(method.to_s) if match?(method, method_names)
result
end
end
def match?(element, array)
array.each do |a|
a = a.to_s if a.instance_of?(Object)
return true if element.match(a)
end
return false
end
end
将find_name(*args)方法放置在类或模块内的任何非嵌套位置,即可依照参数查找所处位置以上该类的方法.
例如放在类的最开始会找不到任何方法,放在类最后可找到所有方法。
其实中红字的singleton_methods是查找类型,可搜索到特殊类方法,false指不包含超类,因为还不是很理解超类的概念,所以加了false.
可以换成
public_methods
private_methods
protected_methods
instance_variables
instance_methods
等进行过滤,例如instance_methods可以将self.型的特殊类方法过滤掉.
蓝字为匹配对象,我写了Object,因为其是所有类的父类。
find_name(*args)参数利用正则表达式匹配方法名,进行有目的的筛选,以及模糊搜索
例如
find_name /\w/ 可匹配的所有方法
find_name /game/ 可匹配的所有名称包含game的方法
这种方式与直接用instance_methods之类的语句相比,可断点查询,可模糊搜索,非常适合我这种间接性记忆缺失症患者进行搜索...... |
|