Problem when 'loading' a file containing a class derived fro

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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs