Dynamically calling methods that require a block


#1

Is it possible to call methods that require block inputs dynamically
without resorting to “eval”? For example, consider:

a = [1,2,3]
a.detect{|x| x > 2}

I want to know if it’s possible to do something like the following (this
doesn’t work):

a.send(:detect, {|x| x > 2})

I’m using Ruby 1.8.6

Thanks…


#2

Barun S. wrote:

I’m using Ruby 1.8.6

Thanks…

Just pass the block to the send method as you normally would pass a
block:

a.send(:detect, &proc {|x| x > 2})
=> 3
a.send(:detect) {|x| x > 2}
=> 3


#3

Ah, right I forgot the ampersand. I needed to be able to define the
block separately from the send call, so I tried this:

cond = Proc.new {|x| x > 2}
a.send(:detect, cond)

but I needed that second line to be
a.send(:detect, &cond)

thanks!

Joel VanderWerf wrote:

Barun S. wrote:

I’m using Ruby 1.8.6

Thanks…

Just pass the block to the send method as you normally would pass a
block:

a.send(:detect, &proc {|x| x > 2})
=> 3
a.send(:detect) {|x| x > 2}
=> 3