Cur*_*ind 1 ruby metaprogramming
请考虑以下代码:
module MyClass
def foo
"method"
end
end
Run Code Online (Sandbox Code Playgroud)
现在,我可以照常实例化此类的新类
@my_new_class = MyClass.new
Run Code Online (Sandbox Code Playgroud)
或者,我可以做一些元编程魔术
@my_new_class = Class.new { include MyClass }.send :new
Run Code Online (Sandbox Code Playgroud)
问题是两者之间有什么区别?
上面的代码(几乎)等效于:
MyNewClass = Class.new { include MyClass }
@my_new_class = MyNewClass.new
Run Code Online (Sandbox Code Playgroud)
就像
class MyNewClass
include MyClass
end
@my_new_class = MyNewClass.new
Run Code Online (Sandbox Code Playgroud)
using可以动态Class.new声明一个匿名新类:
使用给定的超类(如果没有给出参数,则为Object)创建一个新的匿名(未命名)类。您可以通过将类对象分配给常量来给类命名。
如果给出了一个块,则将其传递给类对象,然后使用将该块在此类的上下文中进行评估
class_eval。