2015-11-03 35 views
0

我是Rails的初学者。我想问你一些关于默认范围的问题。为什么default_scope使用'lambda'?请看下面的课程。为什么在默认的范围内使用rails

Class Category < ActiveRecord::Base 
    default_scope labmda { order('categories.name') } 
end 

为什么不使用典型的块代替lambda?

总之我的问题,

  1. 什么是拉姆达?
  2. 为什么在默认范围内使用lambda?
+1

lambda是没有必要的:http://guides.rubyonrails.org/active_record_querying.html#applying-a-default-scope –

回答

1

lambdas基本上是一种方法来保存块或匿名函数(就像你一直在javascript中做的那样)。如果你不知道块是什么...

[1,3,5,6].map { |n| n * 2 } 

的东西在大括号(或DO和结束语句之间}是块。

所以不是重写块一串的时候,你可以保存它,像这样:

my_lambda = lambda { |n| n * 2 } 

而且你可以调用它像这样:

[1,3,5,6].map(&my_lambda) 

像SERG io说,你并不需要在那里使用lambda。但我想你可以将块保存到其他地方,然后将它与default_scope一起用于它和其他几个类。

+0

现在我看到lambda让我们重复块,就像我们在方法中做的那样。我也明白'lambda'在上面的类中是不需要的。所以你的意思是'default_scope {order('categories.name')}'没有lambda?为什么在不使用lambda的时候首先使用了它? –

+1

我并不确定,但我猜想它或者是旧版本的rails所需要的,或者是那些不知道是否需要它的人写的,只是把它扔到那里,它的工作就这样保存下来了它。在codecademy上,块,特效和lambda表达式覆盖得很好。我建议通过它(很短)来看看使用它们的一些有用案例。另外,如果您觉得满意,请接受我的回答。 – baron816

+0

根据上面引用的代码的书,在默认范围内使用lambda。这本书是“Beginning Rails 4,3rd Edition”。 –