setting attributes with composition

T

Thufir

The Dragon class is composed of the Room class and the Traits class.
The Room class inherits from the Location class which has attribute
accessors.
From the "creatures.rb" file, how can the attributes for a particular
Dragon object be set or read, please?

If the attributes are directly in the Dragon class (or its superclass,
Creature) then the attributes can be read fine.


thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ ruby creatures.rb
creatures.rb:14: undefined local variable or method `creaturs' for
main:Object (NameError)
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ cat Creature.rb
require 'Math'
require 'Traits'
require 'Room'

class Creature

Creature.extend Math
include Math


def initialize ()
@location = Room.new
@traits = Traits.new
end

def saysHello ()
print self.class
puts " says to **** off"
end


def inspect ()
print "class\t\t"
print self.class

@location.inspect
@traits.inspect

print "\n"
end


end
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ cat Location.rb
class Location

attr_accessor :x, :y

def initialize ()
@x = 0
@y = 0
end

def inspect ()
print "\nx\t\t"
print x
print "\ny\t\t"
print y
end

end
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ cat Room.rb
require 'Location'

class Room < Location

def initialize ()
@x = 0
@y = 0
end



end
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ cat Location.rb
class Location

attr_accessor :x, :y

def initialize ()
@x = 0
@y = 0
end

def inspect ()
print "\nx\t\t"
print x
print "\ny\t\t"
print y
end

end
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ cat Dragon.rb
require 'Creature'

class Dragon < Creature

def initialize ()
super
end

end
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ date
Mon Nov 12 22:17:55 PST 2007
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $
 
T

Thufir

I seem to have omitted the particular ruby file which directly
generated the error:

thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ ruby creatures.rb
creatures.rb:14: undefined local variable or method `creaturs' for
main:Object (NameError)
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ cat creatures.rb
require 'ArrayOfCreatures'
require 'MakeCreature'
require 'Location'

include MakeCreature

NumOfCreatures=2
creatures = ArrayOfCreatures.instance

NumOfCreatures.times do |i|
creatures=Dragon.new
end

creaturs[0].location.x = 3
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ date
Mon Nov 12 22:28:42 PST 2007
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $



-Thufir
 
T

Thufir

Yeah, spellink error corrected (thanks). I want to be able to set the
location for a dragon with something like:

drgn=Dragon.new
drgn.location(3,4)

However, I don't want a "location" method added to Dragon nor its
superclass of Creature. That is, how is the location for drgn
changed? The exact syntax isn't so important.

I seem to have lost meaningful output from the inspect method, seems
to be the object id :(



thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ ruby creatures.rb
#<Dragon:0xb7bf031c>
#<Dragon:0xb7bf0308>
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ cat creatures.rb
require 'ArrayOfCreatures'
require 'MakeCreature'
require 'Location'

include MakeCreature

NumOfCreatures=2
creatures = ArrayOfCreatures.instance

NumOfCreatures.times do |i|
creatures=Dragon.new
end

creatures[0].location.x = 3

puts creatures
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ cat Creature.rb
require 'Math'
require 'Traits'
require 'Room'

class Creature

Creature.extend Math
include Math


attr_accessor :location


def initialize ()
@location = Room.new
@traits = Traits.new
end

def saysHello ()
print self.class
puts " says to **** off"
end


def inspect ()
print "class\t\t"
print self.class

@location.inspect
@traits.inspect

print "\n"
end


end
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ cat Dragon.rb
require 'Creature'

class Dragon < Creature

def initialize ()
super
end

def inspect ()
super
end


end
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ cat Location.rb
class Location

attr_accessor :x, :y

def initialize ()
@x = 0
@y = 0
end

def inspect ()
print "\nx\t\t"
print x
print "\ny\t\t"
print y
end

end
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ cat Room.rb
require 'Location'

class Room < Location

def initialize ()
super
end

def inspect ()
super
end


end
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ cat Traits.rb
class Traits




end
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $ date
Tue Nov 13 02:06:30 PST 2007
thufir@arrakis ~/rubyCode/creatures5 $
thufir@arrakis ~/rubyCode/creatures5 $



thanks,

Thufir
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top