原文參考:
http://rails-bestpractices.com/posts/16-dry-metaprogramming
如果你發現一些方法,其定义是类似的,只是方法名称不同,那么我們可以使用元编程来優化我們的代碼...
先來看看經典的"挫男代碼"(從車車進化而來的東東)
class Post < ActiveRecord::Base
validate_inclusion_of :status, :in => ['draft', 'published', 'spam']
def self.all_draft
find(:all, :conditions => { :status => 'draft' }
end
def self.all_published
find(:all, :conditions => { :status => 'published' }
end
def self.all_spam
find(:all, :conditions => { :status => 'spam' }
end
def draft?
self.status == 'draft'
end
def published?
self.status == 'published'
end
def spam?
self.status == 'spam'
end
end
上面那段代碼一看就知道符合定義類似,方法不同的規則了,那么開始重構吧:
class Post < ActiveRecord::Base
STATUSES = ['draft', 'published', 'spam']
validate_inclusion_of :status, :in => STATUSES
class <<self
STATUSES.each do |status_name|
define_method "all_#{status_name}" do
find(:all, :conditions => { :status => status_name }
end
end
end
STATUSES.each do |status_name|
define_method "#{status_name}?" do
self.status == status_name
end
end
end
嘖嘖
分享到:
相关推荐
Ruby元编程第二版,中文影印版,便于英文不好的同学们学习
所谓元编程就是编写直接生成或操纵程序的程序,C++ 模板给 C++ 语言提供了元编程的能力,模板使 C++ 编程变得异常灵活,能实现很多高级动态语言才有的特性(语法上可能比较丑陋,一些历史原因见下文)。普通用户对 ...
MacTalk·人生元编程》是一本随笔文集,主要内容来自作者的微信公众平台【MacTalkBy池建强】。 【MacTalkBy池建强】纯属无心之作,开通在2012末日前夕。最初只是想每天发送一条Mac技巧,但写起来却并非如此,最终...
C++模板元编程,ISBN:9787111267423,作者:(美)大卫 等著,荣耀 译 原作名: C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond 出版年: 2010-1 页数: 277
C++元编程和Boost编程库
C++模板元编程.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
ruby元编程.pdf ruby 元编程 这本书对ruby的调用原理做了非常精辟的分析。 ruby 元编程 这本书对ruby的元编程方式做了比较好的阐释。 ruby 元编程 这本书对结对编程有一个很好的提现。
Ruby元编程pdf
《C++模板元编程实战:一个深度学习框架的初步实现》以一个深度学习框架的初步实现为例,讨论如何在一个相对较大的项目中深入应用元编程,为系统性能优化提供更多的可能。
开源有限元编程语言fenics手册,fenics是linux系统上用于有限元编程的的工具,适用于不同的数学物理问题
c++模板元编程代码
模板元编程,很好的资料,适合学习与开发 ,大家放心下载
Monster 是一个元编程库,它只有头文件,可扩展且面向现代 C++。 它展示了一种编译时算法、序列和高阶元函数的纯类型编程形式。 Monster 提供了一个概念基础和一套广泛而强大且连贯的工具,这使得在现代 C++ 中进行...
c++模板元编程 光盘 去掉boost库和一些东东 7z自解压
.NET元编程英文版
c++开源项目 将c++模板编程推向了一个新的高峰,同时这也是模板元编程的非常好的一份源代码
详细描述C/C++的模板元编程的相关内容
ruby 元编程 中文 《Ruby元编程》以案例形式循序渐进地介绍Ruby特有的实用编程技巧。通过分析案例、讲解例题、回顾Ruby代码库的实现细节,作者不仅向读者展示了Ruby编程的优势和Ruby特有的解决问题的方式,更详细开...
模板元编程技术