Middle
Лямбда ва процедура дар Ruby чӣ аст?
sobes.tech AI
Ҷавоб аз AI
Лямбда һәм Ruby-да процедура — бу Proc объектлары, блок кодын инкапсуляцияли.
Асосий аерма — аларның кайтару бәясе һәм кабул ителә торган аргументлар саны буенча:
-
Лямбда (Lambda):
- Аргументлар санына каты контроль (гадәти метод кебек).
- Лямбда эчендә
return— ул бары тик үзеннән генә бәя кайтара.
# Лямбда мисалы lambda_proc = lambda { |a, b| return a + b } puts lambda_proc.call(1, 2) # 3 # Хата: дөрес булмаган аргумент саны # lambda_proc.call(1) -
Процедура (Proc):
- Аргументлар санына карата каты түгел (аргументлар күбрәк яки аз булса да хата китермәскә мөмкин).
- Процедура эчендә
return— ул аны билгеләгән контексттан бәя кайтара (блоктагы кебек).
# Процедура мисалы proc_proc = Proc.new { |a, b| return a + b } def method_with_proc proc_proc = Proc.new { return "методтан кайту" } proc_proc.call "бу текст күрсәтелмәс" end puts method_with_proc # методтан кайту # Дөрес булмаган аргумент санына хата китерми (тәэсире билгесез булырга мөмкин) # proc_proc.call(1)
Чагыштыру:
| Характеристика | Лямбда (Lambda) | Процедура (Proc) |
|---|---|---|
| Аргументлар контроле | Катгый | Катгый түгел |
return эшчәнлеге |
Үзендә генә бәя кайтара | Контексттан бәя кайтара |
| Класс | Proc (ләкин lambda? флагы белән) |
Proc |
| Ясау ысулы | lambda { ... }, -> { ... } |
Proc.new { ... }, proc { ... } |
Күп очракта, методлар белән охшаш эшләүче блокларны тапшыру өчен, лямбдаларны куллану өстенрәк, чөнки аларның аргументлар һәм return белән эшчәнлеге күбрәк фараз ителә. Процедуралар гадәттә түбән дәрәҗәле бурычлар өчен яки return үзенчәлекле эшчәнлеге кирәк булган очракларда кулланыла.