是否有类名称替换' def'?

时间:2015-01-29 01:16:17

标签: ruby metaprogramming

这是我已经做了很多的事情。如果名称存在,我想知道它的名称:

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的哈希值。

如果名称存在,我想知道此模式的名称。可能,它是元编程技术家族的一个子集,只有这个家族有一个名字。无论哪种方式,我都想知道你称之为什么。

1 个答案:

答案 0 :(得分:1)

Ruby的attr_*,ActiveRecord的belongs_to / has_many或Rails的acts_as_*等方法有时(错误地)称为,但它们确实如此不是。 AFAIK,此类方法没有通用名称。

一般技术称为代码合成,类似于代码生成(如Rails的生成器),但没有实际生成代码;代码是短暂的。然而,代码合成不仅仅是方法,例如, Struct.new综合了类。