Есть ли простые объяснения того, какие процедуры и лямбды есть в Ruby?

Есть ли какие-нибудь «простые» объяснения того, какие процедуры и лямбды есть в Ruby?


person yazz.com    schedule 16.11.2009    source источник


Ответы (1)


Лямбды (которые существуют и на других языках) похожи на специальные функции, созданные только для простого использования, а не для выполнения некоторых сложных действий.

Когда вы используете такой метод, как Array#collect, который принимает блок в {}, вы, по сути, создаете лямбда / proc / block только для использования этого метода.

a = [1, 2, 3, 4]
# Using a proc that returns its argument squared
# Array#collect runs the block for each item in the array.
a.collect {|n| n**2 } # => [1, 4, 9, 16]
sq = lambda {|n| n**2 } # Storing the lambda to use it later...
sq.call 4 # => 16

См. Анонимные функции в Википедии и некоторые другие вопросы SO, чтобы узнать о нюансах lambda и Proc.

person jtbandes    schedule 16.11.2009
comment
В приведенном выше примере это можно было бы сделать без лямбды. Разве сборка - это не то же самое, что цикл for next, в котором блок является телом? Я просто пытаюсь увидеть преимущества использования блока. - person yazz.com; 16.11.2009
comment
Конечно, вы можете сделать это с помощью цикла for, но это более элегантный и похожий на Ruby способ сделать это. Другие методы может быть сложнее воспроизвести с помощью цикла. - person jtbandes; 16.11.2009
comment
Хорошо, я думаю, было бы полезно узнать, что я могу делать с Lambdas и Procs, которые в противном случае были бы слишком многословными, возможно, с примером. - person yazz.com; 16.11.2009
comment
Это само по себе является примером. Без этого было бы aa=[]; for i in 0...(a.length); aa<<a[i]**2; end; aa - person jtbandes; 17.11.2009
comment
Хорошо, спасибо, это был хороший пример. Так код становится понятнее. Спасибо - person yazz.com; 17.11.2009