Can anyone help me get around this?

  class C
    def r ; "r" ; end
  end

  module M
    def r
      #return '{' + super + '}'
      target = lambda{ super }
      b( target )
    end
    def b( target )
      '{' + target.call + '}'
    end
  end

  module N
    def r
      target = lambda{ super }
      b( target )
    end
    def b( target )
      '[' + target.call + ']'
    end
  end

  class D < C
    include M
    include N
  end

  d = D.new
  p d.r  #=> "[[r]]"

The result should be "[{r}]". Notice the remarked line I left in there,
if you unremark that line it works fine. So what going on? What can I
do to fix this?

Thanks,
T.