ActiveSupport 是Rails中的无名英雄。那些大量让Rails代码更加漂亮和强大的功能在ActiveSupport中实现。它加了很多在Rails中普遍使用的方法到核心类中。如果你不介意花时间发觉它们,你会学习到各种方便的技巧,且能应用到你的程序中。
先看下下面这个习惯用法
def create_book
book = Book.new
book.title = "Trafalgar: The Nelson Touch"
book.author = "David Howarth"
@db.add(book)
book
end
你创建了一个对象,给对象设置属性,然后返回这个对象。ActiveSupport 中加入了一个可以让习惯用法美化(在某些情况下,简化)的新的方法(叫 returning)到Object中。
def create_book
returning Book.new do |book|
book.title = "Trafalgar: The Nelson Touch"
book.author = "David Howarth"
@db.add(book)
end
end
后者是没有短于前者,但内容更优雅。我感觉更“ Rubyish ” 。有些时候,它可以为您节省几行代码,如果这很重要的。 (只需浏览下Rails代码就能找到更多的例子。 )
Object#returing在Rails中已在相当长的一段时间,被检测是在2005年3月20号的第949修订 。 (它现在存在于active_support / core_ext /object/ misc.rb ,和原来的略有不同,不过还是很简短)
找这个方法的注释你会发现“A Ruby-ized realization of the K combinator, courtesy of Mikael Brockman.”
。。。。。。
。。。。。。
。。。。。。
这个实现非常简明扼要:
def returning(value)
yield(value)
value
end