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 სპეციფიკური ქცევა სასურველია.