以下两个作用域生成相同的结果,哪种语法更可取,还有其他区别吗?
scope :paid, lambda { |state| where(state: state) }
scope :paid, ->(state) { where(state: state) }
最佳答案
出于可读性原因,最好对单行 block 使用新语法 ->
(在 Ruby 1.9 中引入),对多行 block 使用 lambda
。示例:
# single-line
l = ->(a, b) { a + b }
l.call(1, 2)
# multi-line
l = lambda do |a, b|
tmp = a * 3
tmp * b / 2
end
l.call(1, 2)
这似乎是在 bbatsov/ruby-style-guide 中建立的社区公约.
所以,在你的情况下,会更好:
scope :paid, ->(state) { where(state: state) }
关于ruby-on-rails - Ruby 中 lambda 和 -> 运算符的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28215047/