Project1

标题: class分析工具 v0.1 2009-2-15 [打印本页]

作者: 灼眼的夏娜    时间: 2009-2-16 20:00
还可以提取出方法的参数个数。。 至于方法内容是不可能的。。。再说了

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

内部类的方法定义看ruby源码都可以找到的。。
作者: 脚本小妹    时间: 2009-2-16 20:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: 菜鸟飞呀飞    时间: 2009-2-17 02:19
提示: 作者被禁止或删除 内容自动屏蔽
作者: 沉影不器    时间: 2009-2-17 04:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: 神思    时间: 2009-2-18 08:49
不太可能..
那只是函数名而已..
我不认为人家会把函数原码放到函数内...
作者: 木葬枫    时间: 2009-2-18 20:19
突然想起楼主的“自动画地图”脚本―_―+
作者: zh99998    时间: 2009-2-18 20:42
以下引用灼眼的夏娜于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
作者: zh99998    时间: 2009-6-12 08:00
标题: class分析工具 v0.1 2009-2-15

  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}




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1