【发布时间】:2015-08-19 09:45:30
【问题描述】:
我看到很多例子
def t(*args)
I18n.t(*args)
end
而且很少
delegate :t, to: I18n
老实说,第二种解决方案在语义上更好。为什么人们倾向于不使用它?
【问题讨论】:
-
我会选择“因为他们不知道
delegate方法。” -
使用委托有什么缺点吗?
-
看看
delegate源代码(是的,这是一种方法,而不是关键字或任何东西)。在引擎盖下,它实际上定义了一个像你这样的方法。唯一的区别是修改方法需要一些额外的选项,但它只在加载模块时执行一次,并且开销实际上不存在,所以简而言之 - 没有可测量的差异。 -
另外:它会生成自定义异常消息,因此更容易调试github.com/rails/rails/blob/master/activesupport/lib/…
标签: ruby-on-rails ruby ruby-on-rails-4 rails-i18n