元编程是动态语言特别重要的特性之一。掌握元编程很重要,这样能写出非常优雅的代码,也是理解很多架构的基础。ruby的元编程能力很强。此处我做一个小小的记录。以后会慢慢的补充更多。
Object 和 Class
- 如何给一个已经定义了得Class增加方法
class String def to_alphanumeric gsub /[^\w\s]/, '' end end
- 一个对象Object有些methods
"hello".class # => String String.class # => Class "hello".methods == String.instance_methods inherited = false Class.instance_methods(inherited) # => [:superclass, :allocate, :new]
superclass 信息如下:String.superclass # => Object Object.superclass # => BasicObject BasicObject.superclass # => nil Class.superclass #=> Module Module.superclass # => Object
- 常量
M.constants
- 变量
obj.instance_variable_set("@x", 1) obj.instance_variables obj.instance_variable_get("@x")
- class 的名称 不能与 module 名称不一样, 如Text , 因为Text 已经在ActionMailer 中定义 Module Text , 所以,class Text 会报错,解决这个问题的是
module MyModule class Text end end
- ruby 方法的执行包括两个方面:寻址(method lookup) 和 self 语境
method lookup 可以通过 ClassName.ancestors 能知道出其寻址过程。寻址是向上找superclass和module
Method
Blocks
代码生成代码