Actions
Bug #21001
closedunexpected nil result from proc with ensure and next
Description
Hello,
I have noticed a different program behavior in Ruby 3.4 compared to previous versions. This is a simplified example for debugging that returns the expected result in Ruby 3.3 but nil in Ruby 3.4
Here is the example program:
puts "Ruby: #{RUBY_VERSION}"
# okay all versions
# RUN_ARRAY = [1]
# fails ruby 3.4 only
RUN_ARRAY = [1,2]
MAP_PROC = Proc.new do |&blk|
block_results = []
RUN_ARRAY.each do |value|
block_value = blk.call(value)
block_results.push block_value
end
block_results
ensure
next block_results
end
test_fn_results = MAP_PROC.call do |value|
break if value > 1
next value
end
puts test_fn_results.inspect
For Ruby 3.3.6 the output is:
Ruby: 3.3.6
[1]
For Ruby 3.4.1 the output is:
Ruby: 3.4.1
nil
I am expecting the Ruby 3.3 output even for Ruby 3.4. This appears to be a bug, since the program implementation is unchanged. Perhaps there is a bug in the code that is now only showing up with Ruby 3.4, but that seemed unlikely since it's working as expected in other versions.
Thank you
Actions
Like0
Like0Like0Like0Like0