Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Redefining class

Reply
Thread Tools

Redefining class

 
 
Henry Savr
Guest
Posts: n/a
 
      08-24-2006
Thank you, guys, for help with my previous problems. With your
assistance my second week with Ruby was more or less successful.

However...
I redefined couple methods of the Time class
Everything worked fine, so I wanted to combine all the stuff in the
module. But Ruby began complaining, when I just enclosed my job with
words "module X1" and "end".

That was fine:
class Time
...
end
class Is
...
end
class Money
...
end
=========================
Problems start here:
module X1
class Time
...
end
class Is
...
end
class Money
...
end
end
========================
I think, that Ruby considers class Time inside the module as a new
class, which belongs module X1. So I have to inform him/her , that
it is the same class, as the original one. And I don't know how to do
that.

Please, help.
Thank you
Henry

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Mauricio Fernandez
Guest
Posts: n/a
 
      08-24-2006
On Fri, Aug 25, 2006 at 01:52:43AM +0900, Henry Savr wrote:
> Problems start here:
> module X1
> class Time
> ...
> end
> class Is
> ...
> end
> class Money
> ...
> end
> end
> ========================
> I think, that Ruby considers class Time inside the module as a new
> class, which belongs module X1. So I have to inform him/her , that
> it is the same class, as the original one. And I don't know how to do
> that.


class X; end
module Y; class ::X; def foo; "X#foo"; end end end
X.new.foo # => "X#foo"

--
Mauricio Fernandez - http://eigenclass.org - singular Ruby

 
Reply With Quote
 
 
 
 
Rick DeNatale
Guest
Posts: n/a
 
      08-24-2006
On 8/24/06, Mauricio Fernandez <(E-Mail Removed)> wrote:

>
> class X; end
> module Y; class ::X; def foo; "X#foo"; end end end
> X.new.foo # => "X#foo"


Really? Was this under 1.8.x or 1.9, I'd be surprised if it was
either, a gedanken experiment perhaps?

irb(main):001:0> class X
irb(main):002:1> end
=> nil
irb(main):003:0> module Y; class X; def foo; "X#foo"; end; end
irb(main):004:1> end
=> nil
iirb(main):005:0> X.new.foo
NoMethodError: undefined method `foo' for #<X:0xb7d4f560>
from (irb):6
from :0
irb(main):006:0> Y::X.new.foo
=> "X#foo"

The original poster's supposition is correct, modules (and classes for
that matter) are namespaces,

irb(main):001:0> module X1
irb(main):002:1> class Time
irb(main):003:2> end
irb(main):004:1> end
=> nil
irb(main):005:0> X1::Time == Time
=> false

The Time class inside X1 is different than the Time class!

irb(main):006:0> module X1
irb(main):007:1> class Time
irb(main):008:2> def foo
irb(main):009:3> "foo"
irb(main):010:3> end
irb(main):011:2> end
irb(main):012:1> end
=> nil
irb(main):013:0> Time.new.foo
NoMethodError: undefined method `foo' for Thu Aug 24 19:38:52 EDT 2006:Time
from (irb):13
from :0
irb(main):014:0> X1::Time.new.foo
=> "foo"

With it's own methods!

And if we just refer to Time inside X1

irb(main):023:0> module X1
irb(main):024:1> def self.myTime
irb(main):025:2> Time
irb(main):026:2> end
irb(main):027:1> end
=> nil
irb(main):028:0> X1.myTime
=> X1::Time

We get X1's Time.

Now that begs the question of how to refer to the 'real' Time class
inside a module. One way is with an "empty namespace."

irb(main):015:0> module X1
irb(main):016:1> def self.baseTime
irb(main):017:2> ::Time
irb(main):018:2> end
irb(main):019:1> end
=> nil
irb(main):020:0> X1.baseTime
=> Time
irb(main):021:0> X1.baseTime == Time
=> true


--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

 
Reply With Quote
 
Mauricio Fernandez
Guest
Posts: n/a
 
      08-25-2006
On Fri, Aug 25, 2006 at 08:46:54AM +0900, Rick DeNatale wrote:
> On 8/24/06, Mauricio Fernandez <(E-Mail Removed)> wrote:
> >
> >class X; end
> >module Y; class ::X; def foo; "X#foo"; end end end

==
This is what my message was about; you omitted it in your irb session.

> >X.new.foo # => "X#foo"

>
> Really? Was this under 1.8.x or 1.9,


Under

RUBY_VERSION # => "1.8.5"
RUBY_RELEASE_DATE # => "2006-07-07"

> I'd be surprised if it was either, a gedanken experiment perhaps?


No. I ran that code under xmpfilter
http://eigenclass.org/hiki.rb?ruby+xmpfilter+0.2.0

It's pretty convenient for ruby-talk postings, and the output is much easier
to read than irb transcripts.

> irb(main):001:0> class X
> irb(main):002:1> end
> => nil
> irb(main):003:0> module Y; class X; def foo; "X#foo"; end; end

========
this is not the code I wrote (it's missing the :
> irb(main):004:1> end
> => nil
> iirb(main):005:0> X.new.foo
> NoMethodError: undefined method `foo' for #<X:0xb7d4f560>
> from (irb):6
> from :0
> irb(main):006:0> Y::X.new.foo
> => "X#foo"

[...]

With the original code:

irb(main):001:0> class X; end
=> nil
irb(main):002:0> module Y; class ::X; def foo; "X#foo"; end end end
=> nil
irb(main):003:0> X.new.foo
=> "X#foo"

(definitely harder to read

--
Mauricio Fernandez - http://eigenclass.org - singular Ruby

 
Reply With Quote
 
Rick DeNatale
Guest
Posts: n/a
 
      08-25-2006
On 8/24/06, Mauricio Fernandez <(E-Mail Removed)> wrote:
> On Fri, Aug 25, 2006 at 08:46:54AM +0900, Rick DeNatale wrote:


> > irb(main):003:0> module Y; class X; def foo; "X#foo"; end; end

> ========
> this is not the code I wrote (it's missing the :


Okay, I missed that, I guess it's time for new eyeglasses.
--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

 
Reply With Quote
 
dblack@wobblini.net
Guest
Posts: n/a
 
      08-27-2006
Hi --

On Fri, 25 Aug 2006, Rick DeNatale wrote:

> On 8/24/06, Mauricio Fernandez <(E-Mail Removed)> wrote:
>> On Fri, Aug 25, 2006 at 08:46:54AM +0900, Rick DeNatale wrote:

>
>> > irb(main):003:0> module Y; class X; def foo; "X#foo"; end; end

>> ========
>> this is not the code I wrote (it's missing the :

>
> Okay, I missed that, I guess it's time for new eyeglasses.


Or eigenglasses


David

--
http://www.rubypowerandlight.com => Ruby/Rails training & consultancy
----> SEE SPECIAL DEAL FOR RUBY/RAILS USERS GROUPS! <-----
http://dablog.rubypal.com => D[avid ]A[. ]B[lack's][ Web]log
http://www.manning.com/black => book, Ruby for Rails
http://www.rubycentral.org => Ruby Central, Inc.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Redefining nested class on class specialization. Belebele C++ 6 11-02-2007 06:51 PM
Redefining an enumerated attribute type Nick Bassiliades XML 1 12-12-2005 01:21 PM
Nested Class, Member Class, Inner Class, Local Class, Anonymous Class E11 Java 1 10-12-2005 03:34 PM
within a class, redefining self with pickled file syd Python 2 04-08-2005 05:47 AM
redefining cout (for using printf/mexprintf) uli C++ 5 04-21-2004 04:04 AM



Advertisments