Bird
0
0

How can you fix this Ruby code so each lambda remembers its own value of idx even after the loop?

hard📝 Application Q9 of 15
Ruby - Blocks, Procs, and Lambdas
How can you fix this Ruby code so each lambda remembers its own value of idx even after the loop?
lambdas = []
idx = 0
3.times do
  lambdas << lambda { idx }
  idx += 1
end
lambdas.each { |l| puts l.call }
AReplace lambda with Proc.new without changes
BDeclare idx as a global variable
CCall lambdas inside the loop instead of after
DUse a block parameter to capture idx: <code>3.times do |i| lambdas << lambda { i } end</code>
Step-by-Step Solution
Solution:
  1. Step 1: Identify problem

    Lambdas capture idx by reference, so all return final idx value (3).
  2. Step 2: Use block parameter

    Using 3.times do |i| ... captures i by value each iteration.
  3. Step 3: Modify code

    Change to 3.times do |i| lambdas << lambda { i } end so each lambda remembers its own i.
  4. Final Answer:

    Use a block parameter to capture idx: 3.times do |i| lambdas << lambda { i } end -> Option D
  5. Quick Check:

    Block parameters create new variable scope per iteration [OK]
Quick Trick: Use block parameters to capture loop variable per iteration [OK]
Common Mistakes:
  • Assuming lambdas capture variable value automatically
  • Using global variables unnecessarily
  • Calling lambdas too early

Want More Practice?

15+ quiz questions · All difficulty levels · Free

Free Signup - Practice All Questions
More Ruby Quizzes