[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

setting attributes with composition

Thufir Hawat

11/13/2007 6:26:00 AM

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 fuck 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 $


3 Answers

Thufir Hawat

11/13/2007 6:30:00 AM

0

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[i]=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


Thorsten Müller

11/13/2007 9:41:00 AM

0

>
> creaturs[0].location.x = 3
>

all i can see here, without too much analysis of your code, is that you
use creaturs[0] instead of creatures[0]
--
Posted via http://www.ruby-....

Thufir Hawat

11/13/2007 10:12:00 AM

0

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[i]=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 fuck 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