Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Superclass mismatches

Reply
Thread Tools

Superclass mismatches

 
 
listrecv@gmail.com
Guest
Posts: n/a
 
      08-06-2006
I'm sometimes seeing an error "superclass mismatch". I have no idea
what this error is. could anyone either explain it or point me to the
docs (or src code)?

 
Reply With Quote
 
 
 
 
Mauricio Fernandez
Guest
Posts: n/a
 
      08-06-2006
On Mon, Aug 07, 2006 at 07:00:06AM +0900, http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> I'm sometimes seeing an error "superclass mismatch". I have no idea
> what this error is. could anyone either explain it or point me to the
> docs (or src code)?


X = Class.new
Y = Class.new
class Foo < X; end
class Foo < Y; end
# ~> -:4: superclass mismatch for class Foo (TypeError)

In the above situation it's obvious that you're saying that Foo is derived
from X at first and then Y (!= X) the second time, but you might have run into
this problem with something like

class Foo < Struct.new(:a, :b, :c)
# ....
end

if you load()ed that file more than once (this can happen if you require()
the file under two different names), since each time Struct.new is evaluated
a new class will be created.

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

 
Reply With Quote
 
 
 
 
listrecv@gmail.com
Guest
Posts: n/a
 
      08-07-2006
Thanks for the explanation. I'm still stumped - it seems like I have
two classes with the same name:

irb(main):015:0> ResellerCategory
=> Taxonomy::ResellerCategory
irb(main):016:0> ResellerCategory.superclass
=> Taxonomy::Category
irb(main):017:0> ResellerCategory.superclass == Taxonomy::Category
=> false

Huh?

irb(main):018:0> ResellerCategory.superclass.object_id
=> 46413760
irb(main):019:0> Taxonomy::Category.object_id
=> 47673490

How did that happen?

irb(main):020:0> module Taxonomy; class ResellerCategory < Category;
end ; end
TypeError: superclass mismatch for class ResellerCategory
irb(main):023:0> module Taxonomy; class ResellerCategory <
ResellerCategory.superclass; end ; end
=> nil

My questions are:
1) How did that happen? It seems like 1 != 1
2) More importantly, how can I stop this error from happening? (It's
caused when the file defining ResellerCategory is loaded a second time)

 
Reply With Quote
 
Mauricio Fernandez
Guest
Posts: n/a
 
      08-07-2006
On Mon, Aug 07, 2006 at 05:10:11PM +0900, (E-Mail Removed) wrote:
> irb(main):015:0> ResellerCategory
> => Taxonomy::ResellerCategory
> irb(main):016:0> ResellerCategory.superclass
> => Taxonomy::Category
> irb(main):017:0> ResellerCategory.superclass == Taxonomy::Category
> => false

[...]
> irb(main):018:0> ResellerCategory.superclass.object_id
> => 46413760
> irb(main):019:0> Taxonomy::Category.object_id
> => 47673490

[...]
> irb(main):020:0> module Taxonomy; class ResellerCategory < Category;
> end ; end
> TypeError: superclass mismatch for class ResellerCategory
> irb(main):023:0> module Taxonomy; class ResellerCategory <
> ResellerCategory.superclass; end ; end
> => nil
>
> My questions are:
> 1) How did that happen? It seems like 1 != 1


Taxonomy::Category has been redefined, as if you were doing
module Taxonomy; Category = Class.new { ... } end
or maybe
module Taxonomy; remove_const :Category; class Category; ... end end
and that were being evaluated more than once.
Can you show the code?

> 2) More importantly, how can I stop this error from happening? (It's
> caused when the file defining ResellerCategory is loaded a second time)


You have to make sure that Taxonomy::Category references the same class all
the time. If you can't find why it's changing, you can get by with
module Taxonomy; class ResellerCategory < Category; end end
which must be eval()ed only once, and then replacing in the file to be loaded
repeatedly
class ResellerCategory < Category
with
class ResellerCategory

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

 
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
Search for a string in another string allowing mismatches Janus Bor Ruby 3 09-26-2010 08:33 AM
How to check if another object is my superclass from a function in aneven higher superclass? bart van deenen C++ 6 03-03-2009 02:44 PM
calling superclass __init__ when superclass is object Evan Klitzke Python 0 08-02-2007 05:15 AM
prototype mismatches Gary C++ 4 01-07-2004 08:15 PM
Constructor / destructor call mismatches Dave Theese C++ 1 09-24-2003 12:57 AM



Advertisments