The below code works just fine in Ruby but I get a LocalJumpError in
Rails stating "no block given". I thought I knew what a block was, but
given the results, I am not so sure. Could someone please offer an
explanation as to what is going on?
Thanks,
C.
class Array
def comb(n = size)
if size < n or n < 0
elsif n == 0
yield()
else
self[1..-1].comb(n) do |x|
yield(x)
end
self[1..-1].comb(n - 1) do |x|
yield([first] + x)
end
end
end
end
I was trying to run it in some controller code. I gave up trying to do
anything fancy and just focused on getting something simple to run.
The exception name in the header is LocalJumpError, and the error
message in the box is "no block given". I placed the array extension
as the first thing in the controller file before the controller class.
I call the sample below from within a method in the controller class.
['a','b','c','d'].comb(3).each do |element|
puts element
end
here is where it points to the errors:
app/controllers/courses_controller.rb:11:in `comb'
app/controllers/courses_controller.rb:11:in `comb'
app/controllers/courses_controller.rb:5:in `comb'
app/controllers/courses_controller.rb:10:in `comb'
Because it is the first thing in the file, the line numbers will add
up with the previous code example. They point to the yields.
Thanks for the eyes
with the array output, i was tacking on a .each without even thinking
about it. Comparing the ruby code, i completely glossed over
the .each .