Подтвердить что ты не робот

Когда использовать лямбду в Ruby on Rails?

Когда следует использовать лямбда или proc? Я видел их как анонимные функции, но я изо всех сил пытаюсь понять эту концепцию. Я был бы признателен за любые ссылки или примеры того, когда вы можете использовать их в Ruby, но особенно в Ruby on Rails.

4b9b3361

Ответ 1

http://augustl.com/blog/2008/procs_blocks_and_anonymous_functions/ имеет сокращение тех блоков /procs/lambdas, как вы можете их использовать и как они сравниваются к функциям на других языках. Это определенно отвечает на ваш вопрос.

Помните, что в последнем разделе "Заметка о лямбдах" упоминается точка, которая верна только в Ruby 1.8 и изменена в версии 1.9 - Ruby: Proc.new {'waffles' } vs. proc {'waffles'}

Ответ 2

Я не вижу, где вы делаете различие между Ruby on Rails и Ruby. Если вы пишете приложение Ruby on Rails, вы пишете Ruby-код, поэтому, если это полезно в Ruby, оно должно быть полезно в Ruby on Rails.

В любом случае, эта статья, Некоторые полезные закрытия в Ruby, должна быть полезной, а также: http://www.robertsosinski.com/2008/12/21/understanding-ruby-blocks-procs-and-lambdas/

Ответ 3

Это фрагмент кода, который позволяет вам пройти.

Это особенно полезно в named_scope, он позволяет вам сделать что-то вроде этого:

named_scope :scoped_by_user, lambda {|user| {:conditions=>{:user_id=>user.id}}}

Скажите, что у вас есть модель проекта, и вы хотите получить все проекты для одного конкретного пользователя, вы можете сделать что-то вроде этого:

Project.scoped_by_user(123)

Ответ 4

Где я видел, что Lambda используется в тестировании...

lambda do
    post :create, :user => @attr
end.should_not change(User, :count)

Lambda позволяет вам провести этот тест в конце, чтобы убедиться, что код, выполняемый в блоке лямбда, не изменит значение пользователя.

Ответ 5

Что такое лямбда?

Попробуйте сделать это с помощью irb.

lam = lambda { puts "Hello world"}
lam.class

#output is
=> Proc

lambda в ruby ​​также является экземпляром класса Proc. лямбды - это другой аромат проков.

Что такое Proc?

Объекты Proc - это блоки кода, привязанные к набору локальных переменных.

proc = Proc.new { puts "Hello World" }
proc.call

#output is
=> Hello World

В чем разница между proc и лямбдой? Сравнение будет объяснять использование

Lambdas проверяет количество аргументов, а procs - нет.

multiply = lambda { |x,y| x*y }
multiply.call(2,3)  #=>6
multiply.call(2)    #ArgumentError: wrong number of arguments (1 for 2)

multiply = Proc.new {|x| x*x}
multiply.call(2)    # =>4
multiply.call(2,3)  # =>4 (It ignore the second argument)

Lambdas и procs обрабатывают ключевое слово return по-разному (Например, прочтите статью ниже)

Прочтите эту замечательную статью для более подробной информации http://awaxman11.github.io/blog/2013/08/05/what-is-the-difference-between-a-block/

Ответ 6

lambda исключительно полезен в named_scope, поэтому вы можете передавать параметры named_scopes.