Лямбды
Procs со строгим числом аргументов
«Лямбды» — бесплатный урок Ruby Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.
Proc со строгим количеством аргументов
Лямбда — это особый вид Proc, который ведёт себя больше как обычный метод: он проверяет количество аргументов и обрабатывает return обычным образом. Используйте лямбду, когда Вам нужно предсказуемое поведение, похожее на поведение метода.
square = lambda { |x| x * x }
puts square.call(6)Лямбда со стрелкой
Стрелочный синтаксис ->, который называют «лямбдой со стрелкой», — самый распространённый способ записывать лямбды. Параметры указывают в круглых скобках.
add = ->(a, b) { a + b }
puts add.call(4, 5)Вызов лямбд
Лямбды поддерживают те же способы вызова, что и Proc: .call, .() и [ ].
triple = ->(x) { x * 3 }
puts triple.call(2)
puts triple.(2)
puts triple[2]Строгая проверка аргументов
В отличие от Proc, лямбда вызывает ArgumentError, если ей передать неправильное количество аргументов. Это позволяет обнаружить ошибки на раннем этапе.
greet = ->(name) { "Hi #{name}" }
puts greet.call("Sam")
begin
greet.call
rescue ArgumentError => e
puts "Error: #{e.message}"
endreturn остаётся локальным
return внутри лямбды завершает только лямбду, после чего выполнение продолжается. Это соответствует поведению методов.
def demo
l = -> { return 10 }
l.call
20 # this runs
end
puts demoПроверка, является ли объект лямбдой
И Proc, и лямбды являются экземплярами Proc. Используйте lambda?, чтобы различать их.
l = ->(x) { x }
pr = proc { |x| x }
puts l.lambda?
puts pr.lambda?Лямбды без аргументов
Если лямбда не принимает параметров, круглые скобки можно опустить.
now = -> { Time.now.year }
puts "Year: #{now.call}"Многострочные лямбды
Лямбда может занимать несколько строк. Последнее выражение становится возвращаемым значением.
classify = ->(n) {
return "zero" if n.zero?
n.positive? ? "positive" : "negative"
}
puts classify.call(0)
puts classify.call(-3)Передача лямбд методам
Как и Proc, лямбды преобразуются в блоки с помощью &, поэтому их можно передавать в map, select и другие подобные методы.
doubler = ->(n) { n * 2 }
p [1, 2, 3].map(&doubler)Лямбды как возвращаемые значения
Метод может создать и вернуть лямбду, что позволяет на лету создавать специализированные функции.
def multiplier(by)
->(n) { n * by }
end
times10 = multiplier(10)
puts times10.call(5)Собираем всё вместе
Лямбды — это Proc со строгими правилами, похожие на методы:
- Записывайте их с помощью
lambda { }или->(args) { }. - Они проверяют количество аргументов и оставляют
returnвнутри лямбды. - Используйте их, когда важна корректность или когда нужно создавать функции для возврата.
is_even = ->(n) { n.even? }
p [1, 2, 3, 4, 5, 6].select(&is_even)Быстрая проверка
Проверьте, насколько хорошо Вы поняли лямбды.
Повторение
Вы узнали о лямбдах:
- Лямбда — это Proc со строгими правилами; записывайте её с помощью
->. - Она проверяет количество аргументов.
returnзавершает только лямбду.lambda?отличает лямбду от обычного Proc.
area = ->(w, h) { w * h }
puts area.call(3, 4)Часто задаваемые вопросы
Урок «Лямбды» бесплатный?
Да — полный текст урока «Лямбды» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.
Чему я научусь в уроке «Лямбды»?
Procs со строгим числом аргументов Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Ruby Academy?
Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Лямбды»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Ruby Academy?
Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.