2017-06-02 48 views
1

我在读Rails docs,我遇到了macros这个词。 我无法找到该术语的定义(在Rails的上下文中)。 有人能指给我一个定义术语的地方吗?什么是Rails中的宏?

我熟悉在不同的上下文为“记录”的行动(鼠标,在OS键盘动作,例如)软件术语。 该术语的不同用法之间是否有任何联系?

回答

3

宏是创建新实例方法的类方法。如果您在超类中创建一个宏,则其所有子类都可以调用该方法,传入参数并快速创建一个或多个自定义实例方法。

Rails的使用这种技术提供了很多功能用很少的代码。例如,has_many和belong_to等关联方法使用宏来生成返回关联对象的实例方法。

在Ruby,宏取决于使用define_method方法,该方法被调用时,将定义在当前的范围的方法。它接受一个参数,它成为新方法的名称,一个块是新方法中的代码。传递给块的任何参数都是新方法可以采用的参数。

举例来说,这里是你怎么能让这将创建一个类的允许您访问方法或设置值的宏观属性哈希:

def make_columns(columms) 
    columns.each do |col| 
    define_method("#{col}") do 
     attributes[col] 
    end 
    end 


columns.each do |col| 
    define_method("#{col}=") do |value| 
     attributes(col) = value 
    end 
    end 
end 

更多的澄清,通过这个环节去How To Write "Macros" in Ruby

+0

已共享未找到该链接的定义:( – blu

+0

再试一次....对不起 –

0

在这种情况下,一个宏是一段代码生成一些其它码。例如:

attr_accessor :foo 

产生这样的:

def foo 
    @foo 
end 

def foo=(val) 
    @foo = val 
end 

是否有期限的不同用途之间有联系吗?

类。你可以说作者attr_accessor“记录”了它应该扩展到的内容。

+0

有没有这样的事情,从Rails的世界,这些时髦的命名:-P – mudasobwa

+0

@mudasobwa只是弱“红宝石宏”:取决于你的“宏” :) –