Middle
Ruby-də lambda və prosedur nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Ruby-də lambda və prosedur Proc obyektləridir və kod bloklarını kapsülləyirlər.
Əsas fərqlər, onların dəyəri geri qaytarma davranışında və qəbul edilən arqumentlərin sayında olur:
-
Lambda:
- Arqumentlərin sayını sərt şəkildə nəzarət edir (adi metod kimi).
- Lambda daxilində
returnyalnız özündən dəyər qaytarır.
# Lambda nümunəsi lambda_proc = lambda { |a, b| return a + b } puts lambda_proc.call(1, 2) # 3 # Xəta: düzgün olmayan arqument sayı # lambda_proc.call(1) -
Proc:
- Arqumentlərin sayına daha az sərtdir (daha çox və ya az arqument olsa belə xəta verməyə bilər).
- Proc daxilində
returndəyəri kontekstdən qaytarır, harada təyin olunubsa (bloku daxilindəkireturnkimi).
# Proc nümunəsi proc_proc = Proc.new { |a, b| return a + b } def method_with_proc proc_proc = Proc.new { return "metoddan dönüş" } proc_proc.call "bu mətn göstərilməyəcək" end puts method_with_proc # metoddan dönüş # Düzgün olmayan arqument sayı ilə xəta vermir (baxmayaraq ki, davranış qeyri-müəyyən ola bilər) # proc_proc.call(1)
Müqayisə:
| Xüsusiyyət | Lambda | Proc |
|---|---|---|
| Arqumentlərin idarə olunması | Sərt | Nəzarətsiz |
return-in davranışı |
Lambda-dan çıxarır | Kontekstdən çıxarır |
| Sinif | Proc (amma lambda? bayrağı ilə) |
Proc |
| Yaradılması | lambda { ... }, -> { ... } |
Proc.new { ... }, proc { ... } |
Əksər hallarda, metodlara bənzər davranış bloklarını ötürmək üçün lambda istifadə etmək daha məsləhətdir, çünki arqumentlər və return ilə daha əvvəlcədən proqnozlaşdırıla bilər. Proc-lər isə daha çox aşağı səviyyəli tapşırıqlar üçün və ya onların xüsusi return davranışı lazım olduqda istifadə olunur.