摘要:
前言Ruby 元编程中,经常可以看到各种 eval 和 heredoc 的结合。其中很多用 heredoc 的位置都会出现 __FILE__ 和 __LINE__ 这两个变量。本文介绍一下它们的作用,以及为什么要这样做。正文先看一个用 class_eval 动态生成实例方法的例子:class A def self.my_attr_reader(*args) args.each do |method| class_eval <<-EOF, __FILE__, __LINE__ def #{method} raise "#{method}" end EOF end 阅读全文
摘要:
前言ActiveSupport 是 Ruby on Rails 的主要模块之一。它通过 hack 一些 Ruby 的内建类来提供一些通用方法,它还自定义了一些有用的通用功能模块,如 memoize,callback等。研究 ActiveSupport,是因为它在 Rails 的诸多模块中相对底层,依赖较少,而且元编程技巧处处可见。作为第一篇文章,我这次选择分析 ActiveSupport的 aliasing 。因为aliasing 的源码很简单,它甚至没有被封装到一个模块中,而是直接hack到module类中去了,而且下一篇的memoizable模块会用到其中的一个方法 alias_metho 阅读全文