Can I pass a block which itself expect a block to instance_exec in ruby?

block, proc, ruby

Solution

`&foo` tries to pass `foo` as a block to `instance_exec`, and you are already passing an explicit block. Omitting ampersand sends `foo` just like any other argument (except that it is a `Proc` instance). So, try this instead:

instance_exec(1,2,3,foo) do |*args, block|
  puts *args
  block.call
  puts "bar"
end

This also means that you can do something like:

bar = proc{ |*args, block|
  puts *args
  block.call
  puts "bar"
}

instance_exec(1,2,3,foo,&bar)

And get the same result.

More info at Difference between block and &block in Ruby

Problem

I expect the code ``` foo=proc{puts "foo"} instance_exec(1,2,3,&foo) do |*args , &block| puts *args block.call puts "bar" end ``` to output ``` 1 2 3 foo bar ``` But got the error ``` both block arg and actual block given ``` Can I pass a block which itself expect a block to instance_exec in ruby?

Original source

Related problems