C
Christoph Schiessl
I have written a simple snippet of code and would appreciate any help
with understanding what's really going on.
### Creating Basic Class
class Person # Same as: class Person < Object
attr_accessor :firstname
attr_accessor :lastname
def initialize(firstname, lastname)
@firstname, @lastname = firstname, lastname
end
def fullname
@firstname + ' ' + @lastname
end
end
### Create two instances of class Person
john = Person.new('John', 'Doe')
john.firstname # => "John"
john.lastname # => "Doe"
john.to_s # => "#<Person:0x356678>"
jack = Person.new('Jack', 'Stone')
jack.firstname # => "Jack"
jack.lastname # => "Stone"
jack.to_s # => "#<Person:0x3512f4>"
class Person
def to_s
'Person: ' + fullname
end
end
john.to_s # => "Person: John Doe"
jack.to_s # => "Person: Jack Stone"
### Everything as expected until here...
### Now the interesing part:
class <<Person
def birthday
'2008-05-16'
end
end
### NOT EXPECTED:
john.birthday # => NoMethodError: undefined method `birthday' for
#<Person ...>
jack.birthday # => NoMethodError: undefined method `birthday' for
#<Person ...>
frank = Person.new('Frank', 'New') # => Try with new instance
frank.birthday # => NoMethodError: undefined method `birthday' for
#<Person ...>
### So basically my question is: What does the 'class <<Person'
Statement really do?
Thank you very much!
Christoph Schiessl
with understanding what's really going on.
### Creating Basic Class
class Person # Same as: class Person < Object
attr_accessor :firstname
attr_accessor :lastname
def initialize(firstname, lastname)
@firstname, @lastname = firstname, lastname
end
def fullname
@firstname + ' ' + @lastname
end
end
### Create two instances of class Person
john = Person.new('John', 'Doe')
john.firstname # => "John"
john.lastname # => "Doe"
john.to_s # => "#<Person:0x356678>"
jack = Person.new('Jack', 'Stone')
jack.firstname # => "Jack"
jack.lastname # => "Stone"
jack.to_s # => "#<Person:0x3512f4>"
class Person
def to_s
'Person: ' + fullname
end
end
john.to_s # => "Person: John Doe"
jack.to_s # => "Person: Jack Stone"
### Everything as expected until here...
### Now the interesing part:
class <<Person
def birthday
'2008-05-16'
end
end
### NOT EXPECTED:
john.birthday # => NoMethodError: undefined method `birthday' for
#<Person ...>
jack.birthday # => NoMethodError: undefined method `birthday' for
#<Person ...>
frank = Person.new('Frank', 'New') # => Try with new instance
frank.birthday # => NoMethodError: undefined method `birthday' for
#<Person ...>
### So basically my question is: What does the 'class <<Person'
Statement really do?
Thank you very much!
Christoph Schiessl