在Ruby中创建宏

时间:2017-12-11 04:21:03

标签: ruby metaprogramming

我有这段代码。我想创建一个宏

create_table(:some_table) do
  primary_key :id

  # should be generated by macro
  DateTime :inserted_at
  DateTime :updated_at
end

如何创建这样一个生成这两行代码的宏,以便我可以这样做:

create_table(:some_table) do
  primary_key :id

  # should be generated by macro
  my_macro_that_generates_timestamps()
end

1 个答案:

答案 0 :(得分:4)

如果您知道这是什么类,您可以使用任何方法进行修补。如果你不知道它是什么类,你总能找到使用破坏事物的穴居人方法

progress2

现在你得到一个例外,并希望有一些见解。一旦你知道,你可以添加方法:

create_table(:some_table) do
  raise self.class.to_s
end

如果您已正确匹配上下文,则该代码应使用该名称。

这里不需要宏,只需要一个简单的方法调用。

class MigrationClass
  def timestamps_as_usual
    DateTime :inserted_at
    DateTime :updated_at
  end
end