设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2391|回复: 1
打印 上一主题 下一主题

一个适用范围很窄的脚本件.

 关闭 [复制链接]

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

跳转到指定楼层
1
发表于 2007-2-24 04:26:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

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之类的语句相比,可断点查询,可模糊搜索,非常适合我这种间接性记忆缺失症患者进行搜索......
纵然千里外,我等雁归来。

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

2
 楼主| 发表于 2007-2-24 04:26:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

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之类的语句相比,可断点查询,可模糊搜索,非常适合我这种间接性记忆缺失症患者进行搜索......
纵然千里外,我等雁归来。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-24 10:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表