1

我刚刚发现了 Ruby 的元编程(在使用 Ruby 7 年后,是时候了!)我有一个问题:

假设我运行一个程序,该程序使用class_eval和其他元编程函数向一个类添加方法,有没有一种简单的方法,当重新运行同一个程序时,已经定义了这些新方法,或者我必须编写自己的系统,每次class_eval使用,还要将生成的代码保存在一个文件中,以便下次运行程序时重新评估它?

谢谢

4

2 回答 2

3

这不是它的完成方式。一种正确的方法是,当您下次运行程序时,再次运行所有这些对define_method, class_eval(以及诸如此类)的调用并在运行时定义方法。

想象一下,如果生成的方法保留在您的源代码中会发生什么?您想attr_accessor用两种新方法替换自己吗?

如果您自己编写这样的元方法并更改它会怎样。您认为所有这些保存的生成方法将如何更新?

我不知道你在哪里读到过元编程,但我强烈推荐这本书:元编程 Ruby。它应该让你头脑清醒。:)

于 2012-09-03T10:12:51.730 回答
2

您不能(可以使用 eval 和自组装字符串,但这不再是元编程)并且不应该这样做,即使 ruby​​ 的标准库在程序启动时也会重新评估。

另一种可能性是分叉,独角兽就是一个很好的例子。评估所有方法定义,然后开始生成子进程,它们是“主”进程的副本。这可以节省您重新评估所有代码的时间,因为与此相比,分叉非常快。

于 2012-09-03T10:13:13.463 回答