查看: 2775|回复: 7

class分析工具 v0.1 2009-2-15

  [复制链接]

八云紫的式神<

梦石
0
星屑
804
在线时间
1250 小时
注册时间
2008-1-1
回帖
3883

烫烫烫

发表于 2009-6-12 08:00:00 | 显示全部楼层 |阅读模式

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

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

×

  1. def read_class(object)
  2.   classname = object.class.to_s
  3.   methods = "
  4. instance_variables
  5. public_methods
  6. private_methods
  7. protected_methods
  8. singleton_methods
  9. constants
  10. nesting
  11. ancestors
  12. class_variables
  13. constants
  14. included_modules
  15. public_instance_methods
  16. private_instance_methods
  17. protected_instance_methods
  18. global_variables
  19. "

  20.   error = "以下方法执行失败"
  21.   sucsess = "以下方法执行成功,结果保存在#{classname}文件夹"
  22.   null = "以下方法返回值为空"
  23.   result = {}
  24.   Dir.mkdir(classname) rescue Dir.foreach(classname){|file|File.delete(classname + file)rescue nil}
  25.   methods = methods.split("\n")
  26.   methods.delete("")
  27.   methods.each do |method|
  28.     method.delete(" ")
  29.     str = eval("object." + method) rescue eval(classname + method) rescue false
  30.     if str == false
  31.       error += "\n" + method
  32.     elsif str.nil? or str.empty?
  33.       null += "\n" + method
  34.     else
  35.       File.open(classname + "/" + method + ".txt", "wb") do |file|
  36.         str = str.inspect
  37.         file.write(str)
  38.         sucsess += "\n" + method
  39.         result[method] = str
  40.       end
  41.     end
  42.   end
  43.   print (error + "\n\n" + sucsess + "\n\n" + null)
  44.   result.each {|key,value| print key + "\n\n" + value}
  45. end
复制代码

使用方法:read_class(实例)
example: read_class(Tilemap.new)
提取类中的方法等资料
也许可以用来分析RGSS内建类

Ruby手册研究中
根据Ruby手册貌似可以把方法转成实例,这样似乎能输出方法的定义了{/fd}
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上

炎发灼眼的讨伐

梦石
0
星屑
50
在线时间
1707 小时
注册时间
2007-8-4
回帖
894
发表于 2009-2-16 20:00:18 | 显示全部楼层
还可以提取出方法的参数个数。。 至于方法内容是不可能的。。。再说了

ruby内部类方法基本都是c写的。。打算提取出ruby源码。。?

内部类的方法定义看ruby源码都可以找到的。。
RMXP&amp;RMVX通用Web化完成- -|||
回复

使用道具 举报

头像被屏蔽
梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-2-16
回帖
19
发表于 2009-2-16 20:54:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

菜鸟飞呀飞 该用户已被删除
发表于 2009-2-17 02:19:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
回帖
2407

第1届Title华丽大赛新人奖

发表于 2009-2-17 04:41:30 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复

使用道具 举报

彩色的银子

梦石
0
星屑
50
在线时间
190 小时
注册时间
2006-6-13
回帖
1260

贵宾

发表于 2009-2-18 08:49:01 | 显示全部楼层
不太可能..
那只是函数名而已..
我不认为人家会把函数原码放到函数内...
-.-
回复

使用道具 举报

kissye的宠物<

梦石
0
星屑
66
在线时间
1564 小时
注册时间
2008-8-11
回帖
6023

贵宾

发表于 2009-2-18 20:19:30 | 显示全部楼层
突然想起楼主的“自动画地图”脚本―_―+
回复

使用道具 举报

八云紫的式神<

梦石
0
星屑
804
在线时间
1250 小时
注册时间
2008-1-1
回帖
3883

烫烫烫

 楼主| 发表于 2009-2-18 20:42:05 | 显示全部楼层
以下引用灼眼的夏娜于2009-2-16 12:00:18的发言:

还可以提取出方法的参数个数。。 至于方法内容是不可能的。。。再说了

ruby内部类方法基本都是c写的。。打算提取出ruby源码。。?

是提取RGSS内建类源码,而不是Ruby内建类


我的思路:
对照Ruby手册重定义掉绝大多数的方法,只留少量方法使下面的代码能够运行
留下要读取定义的方法(比如Window的initialize)
定义成类似
def a(*args)
$a.push "a"
$a.push args
end
这样,Window.new时就会把initialize大部分内容输出到$a
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部