这是我已经做了很多的事情。如果名称存在,我想知道它的名称:
class C
include MyCustomDef # i wrote this somewhere else
my_custom_def :foo do |x|
2*x
end
# foo and bar do the exact same thing
def bar x
puts 'called a method!'
2*x
end
end
也就是说,我创建了一个自定义方法定义器来代替普通def
,它包含了一些行为或其他行为,以及传入的块上的define_method
。
例如,我最近使用它来定义方法,以便将它们的值缓存在对象中,并自动定义另一个方法to_hash
并返回method_name=>method_value
的哈希值。
如果名称存在,我想知道此模式的名称。可能,它是元编程技术家族的一个子集,只有这个家族有一个名字。无论哪种方式,我都想知道你称之为什么。
答案 0 :(得分:1)
Ruby的attr_*
,ActiveRecord的belongs_to
/ has_many
或Rails的acts_as_*
等方法有时(错误地)称为宏,但它们确实如此不是。 AFAIK,此类方法没有通用名称。
一般技术称为代码合成,类似于代码生成(如Rails的生成器),但没有实际生成代码;代码是短暂的。然而,代码合成不仅仅是方法,例如, Struct.new
综合了类。