From: Rick DeNatale Date: 2006-10-27T00:24:47+09:00 Subject: Re: What's the difference between send and instance_eval? On 10/26/06, Joel VanderWerf wrote: > That's true, but only because I chose a bad example. Here's a better one: > > h = {1=>2} > msg = [:concat, [4, 5, 6, IO, String, Kernel, h]] > a = [1,2,3] > p a.send(*msg) # ==> [1, 2, 3, 4, 5, 6, IO, String, Kernel, {1=>2}] > p a.instance_eval(msg.to_s) # ==> NameError > > To make the instance_eval work here, you would have to find a way to > turn the argument array into a string that, when eval-ed, is that same > array. (It's possible, but painful, and you lose the identity of the > hash h.) except that instance_eval can take a block in lieu of a string: a.instance_eval {concat [1,2,3,4,5,6,IO,String,Kernel, h]} => [1, 2, 3, 1, 2, 3, 4, 5, 6, IO, String, Kernel, {1=>2}] Not that I think that send should be eliminated, both methods are useful. Horses for courses. -- Rick DeNatale My blog on Ruby http://talklikeaduck.denhaven2.com/