Ruby元编程与反射机制深度解析
1. 使用method_missing作为过滤器
在Ruby中,若使用 method_missing 拦截所有调用,会存在一些弊端。更好的做法是用它识别特定的调用模式,将无法识别的调用传递给父类处理。
以Ruby on Rails的ActiveRecord模块中的动态查找器功能为例。ActiveRecord是Rails中的对象关系库,可将关系型数据库当作对象存储来访问。它允许通过特定列的值查找匹配的行。例如,若有一个名为 Book 的Active Record类映射到 books 表,且该表包含 title 和 author 列,以前可以这样写(此功能现已弃用):
pickaxe = Book.find_by_title("Programming Ruby")
daves_books = Book.find_all_by_author("Dave Thomas")
Active Record不会预先定义所有可能的查找方法,而是使用 method_missing 。在该方法内部,它会查找未定义的方法调用,匹配模式 /^find_(all_)?by_(.*)/ 以及 /^find_or_(initialize|create)_by_(.*)/ 。若调用的方法不匹配这些模式,或者方法名中的字段与数据库表中的列不对应,Act
超级会员免费看
订阅专栏 解锁全文
36

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



