Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Question about how ruby sources is parsed

0 views
Skip to first unread message

ThoML

unread,
Feb 27, 2008, 10:17:48 AM2/27/08
to
Hi,

I recently came came up with this piece of (monkey-inspired) code:

class String0 < String
def foo
123
end
end

Object.send :remove_const, :String
String = String0

This makes the following two statements work as intended:

p String0.new("foo").foo # => 123
p String.new("foo").foo # => 123

The following doesn't work though:

p "foo".foo
p eval %{"foo".foo}

undefined method `foo' for "foo":String (NoMethodError)

Has somebody an idea if it is possible to make the ruby parser use
the
new String class somehow? I assume there is no way to make this work
but
then: I'd be happy if somebody proves me wrong.

Regards,
Thomas.

Jason Roelofs

unread,
Feb 27, 2008, 10:32:36 AM2/27/08
to
That's weird looking stuff, I can't imaging that it's good to do thing that way.

What's wrong with

class String


def foo
123
end
end

?

Jason

ThoML

unread,
Feb 27, 2008, 10:46:38 AM2/27/08
to
> What's wrong with
>
> class String
> def foo
> 123
> end
> end

Nothing if that's what you want.

The above question was inspired by certain posts to the monkey-thread
and the idea of stacked classes/methods, the proposal of module-
specific hacks and the idea of Module.import/rename (I looked at the
original library referenced by Pit Captain but didn't find the
extended one). Whether it's useful ... Currently I'm rather interested
in if it's possible.

Regards,
Thomas.

Jari Williamsson

unread,
Feb 27, 2008, 11:02:12 AM2/27/08
to
I think "" is hard-wired to constructing String class objects, as the {}
is to creating Hash and [] is to creating Array.


Best regards,

Jari Williamsson

Eric Hodel

unread,
Feb 27, 2008, 3:01:44 PM2/27/08
to

You can't do this without modifying the interpreter.

0 new messages