Mark24
记录灵感、技术、思考
Ruby自省/反射笔记
Ruby原生自省的一些方法
- 获取类的名称:
.class
- 获取超类的名称:
.superclass
获取父类
- 获取类包含的模块:
.included_modules
- 检查是否为实例对象:
.instance_of?
- 呈现对象关系:
.class.ancestors #(返回类和模块名称)
- 返回变量及常量:
.instance_variables.sort
.constants.sort
.local_variables
.global_variables
- 获取对象包含的方法:
.methods.sort
.instance_methods
.private_methods
- 检查对象是否对方法负责:
.respond_to?
- 获得对象内部的内存和静态数据
查看RubyDoc中关于ObjectSpace
- 查看所有方法
.methods
- 查看特定方法的源码
.method(:method_name)
.method(:method_name).owner
.method(:method_name).source_location
- 查看常量(也包含了引用的模块)
.constants
由于所有导入的包,都是绑定在Object上面的。所以这个可以用来查看,导入的名字空间,类似于 Python的 dir()。检验方法
origin_constant = Object.constants
require 'sinatra'
import_sinatra = Object.constants
puts import_sinatra - origin_constant
require 'rails'
import_rails = Object.constants
puts import_rails - import_sinatra
# 可以查看全部都是绑定在Object中
文献参考
默认的模式,都是拓展在Object的基础上,参考Sinatra方式
This style is called a modular application, as opposed to classic applications that are
using the Top Level DSL. While classic applications assume a certain style by default
and extend Object , starting with a modular application assumes next to nothing about
your application setup.
—— 《Sinatra Up and Runing》CHAPTER 4 Modular Applications (Page 67)