On 5/6/06, Eric Hodel <drbrain / segment7.net> wrote:
> On May 5, 2006, at 3:20 PM, Tanner Burson wrote:
>
> > After reading the sharp knives and glue thread, my head started
> > spinning
> > around some ways to minimize or localize the modifications to core
> > classes.
> > This is what I came up with, it's obviously rough, not-all-
> > inclusive, and
> > has some fairly obvious and severe drawbacks, but none-the-less I
> > thought
> > I'd share my 20 minutes of fiddling in the hopes of sparking some
> > conversation if nothing else.
>
> [...]
>
> Ruby does all that with #extend.
>
> module Meta
>
>    attr_reader :something
>
>    def self.extended(o)
>      o.instance_variable_set :@something, 'Hello'
>    end
>
>    def test_meta
>      puts 'Tested Meta!'
>    end
>
> end
>
> > some_string = String.new
> > some_other_string = String.new
> >
> some_string.extend Meta
> > some_string.test_meta # -> "Tested Meta!"
> > puts some_string.something # -> "Hello"
> >
> > some_other_string.test_meta #--> "No method error"

This is cool, very similar to the "adding functionality to the strings
passed to me" idea (in the glue thread), except it's cleaner than
having a def inside every function that wants an extended string. Now,
is there a clever way to extend all strings passed to any methods of a
specific class?

Les