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 өзгөчөлүгү керек болгон учурларда колдонулат.