I actually spotted this in a rails app but traced it back to ruby. Is
this a real problem/bug or am I missing something obvious?
$ cat > person.rb
class Person < Struct.new(:forename, :surname)
end
$ irb
irb> load ‘person.rb’
=> true
irb> load ‘person.rb’
TypeError: superclass mismatch for class Person
from ./person.rb:1
from (irb):2
This behaviour has been experienced with both ruby 1.8.2 and 1.8.4.
Chris
On Fri, Jul 21, 2006 at 06:27:29AM +0900, Chris R. wrote:
TypeError: superclass mismatch for class Person
from ./person.rb:1
from (irb):2
This behaviour has been experienced with both ruby 1.8.2 and 1.8.4.
Each time Struct.new(*args) is evaluated, it creates a new class:
Struct.new(:a,:b) # => #Class:0xa7dd12f4
Struct.new(:a,:b) # => #Class:0xa7dd10c4
Struct.new(:foo) == Struct.new(:foo) # => false
class X < Struct.new(:a); end
class Y < Struct.new(:a); end
X.superclass == Y.superclass # => false
Hi –
On Fri, 21 Jul 2006, Chris R. wrote:
TypeError: superclass mismatch for class Person
from ./person.rb:1
from (irb):2
This behaviour has been experienced with both ruby 1.8.2 and 1.8.4.
It’s because you’re trying to give Person a new superclass: Struct.new
gets called again when you reload the file.
David
On Jul 20, 2006, at 5:27 PM, Chris R. wrote:
TypeError: superclass mismatch for class Person
from ./person.rb:1
from (irb):2
This behaviour has been experienced with both ruby 1.8.2 and 1.8.4.
Chris
Hence to use this with rails which will reload stuff like it’s going
out of style:
Person = Struct.new(:forename, :surname)
class Person
optionally add methods here
end
Ahhh I see. Thanks for the explanation guys.
Chris