使用钩子让程序时刻掌握信息
元编程这个词似乎就是用来吓唬人的。难道是指超越编程的编程?是把编程的程度提升到极致?还是在另一个维度进行编程?实际上,至少在 Ruby 世界里,元编程是一套实用的编码技术,能让你用更少的代码实现所需的功能。Ruby 对元编程的支持,首先体现在让你的代码能够很好地了解周围正在发生的事情。只需付出一点点努力,你就能编写 Ruby 程序,让它知道何时创建了新类、何时调用了方法,甚至何时应用程序即将退出。
当然,如果程序无法利用这些信息做任何事情,那么这些知识就只是琐事。幸运的是,Ruby 程序可以做很多事情:它们可以决定在应用程序退出之前还有一些细节需要处理;可以判断某个错误实际上不是错误,而是一个合理的请求;甚至可以自我重新编程。
本文将通过研究钩子来探索元编程中“了解情况”这一方面。Ruby 钩子是一种指定在特定事件发生时要执行的代码的方式,有时是通过提供一个代码块,有时是通过重写一个方法。我们将了解如何使用钩子来发现一个类有了新的子类、一个模块被包含进来,或者你的程序即将终止。和往常一样,我们会讨论如何使用这些特性,以及如何避免陷入钩子带来的麻烦。
发现新子类
钩子是在某件事情即将发生或已经发生时被调用的代码。一个很好的钩子示例是用于告知类何时有了新子类的钩子。为了了解新子类的出现,你可以定义一个名为 inherited 的类级方法。为了说明它的工作原理,让我们定义一个非常简单的基类,该基类确实定义了 inherited 方法:
class SimpleBaseClass
def self.i
超级会员免费看
订阅专栏 解锁全文
629

被折叠的 条评论
为什么被折叠?



