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) 

第三方gem

Mark24

Everything can Mix.