Blocurile sunt inima stilului idiomatic de programare în Ruby. Un bloc este o bucată de cod anonimă delimitată prin do ... end sau acolade { ... } pasată oricărei metode. În interiorul metodei, blocul este apelat prin cuvântul-cheie yield.
Pentru a stoca un bloc într-o variabilă, Ruby oferă două obiecte: Proc și lambda.
Utilizarea cuvântului yield și verificarea block_given?
# Metodă care execută un bloc și măsoară timpul de execuție:
def masoara_timp
start = Time.now
# block_given? verifică dacă apelantul a furnizat un bloc:
if block_given?
yield # execută codul din blocul pasat
else
puts "Niciun bloc furnizat!"
end
final = Time.now
puts "Durată totală: #{final - start} secunde."
end
# Invocarea metodei cu un bloc:
masoara_timp do
puts "Se execută calcule complexe..."
sleep(0.5)
end
Diferența critică dintre Proc și Lambda
Proc vs. Lambda la verificarea argumentelor și return
# 1. Lambda verifică strict numărul de argumente (aritatea):
o_lambda = ->(a, b) { puts "a: #{a}, b: #{b}" }
# o_lambda.call(1) # Aruncă ArgumentError (wrong number of arguments)!
# 2. Proc este permisiv (atribuie nil argumentelor lipsă):
un_proc = Proc.new { |a, b| puts "a: #{a}, b: #{b}" }
un_proc.call(1) # Ieșire: a: 1, b: nil (nu dă eroare)
# 3. Comportamentul instrucțiunii 'return':
# Într-o lambda, 'return' iese doar din corpul lambdei.
# Într-un Proc, 'return' iese forțat din METODA care a creat Proc-ul!
Întrebări & Exemple de Cod:
Blocuri, Procs și Lambdas în Ruby: yield, &block și Diferențele de AritateAi o nelămurire despre utilizarea comenzii
Blocuri, Procs și Lambdas în Ruby: yield, &block și Diferențele de Aritatesau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.