On Feb 13, 2007, at 1:24 AM, Edwin Fine wrote: > The only way so far that I have been able to create two equal procs > that > have different object IDs is to clone or dup them. Here are a few other ways that seem to be analogous to clone/dup but via other mechanisms: a = lambda { 4 } b = lambda &a c = proc &b d = Proc.new &c def the_block(&block); block; end e = the_block &d p a == b # true p b == c # true p c == d # true p d == e # true This shows that the 'equality' of a lambda proc doesn't get altered via Kernel#lambda, Kernel#proc, Proc.new, or block argument passing. But look at: proc1 = Proc.new { 4 } lambda1 = lambda &proc1 p proc1 == lambda1 # false This shows that Kernel#lambda constructs procs that have different equality semantics than procs from Proc.new. Gary Wright