Forum: Ruby Define objects from classes in different files

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
A74096209c78118ff69d50a51129d697?d=identicon&s=25 Jason Lillywhite (jlillywh)
on 2008-12-18 06:48
Could someone help me with this little problem?

I have a file called fruit2.rb which contains:

class Fruit2
  def taste
    "sweet"
  end
end

I want to use this class in a different file called fruit1.rb which
contains:

require "fruit2"
class Fruit1
  def color
    "red"
  end
end

apple = Fruit1.new
p apple.color
apple = Fruit2.new
p apple.taste

I know the way I'm creating my apple object is wrong because I
over-wrote apple when I assigned Fruit2.new. What I want to do is have a
way to call attributes of a single object from different files. In my
application, I have so many methods, I want them in different files, but
want to use them on a single object. Is there an easy way to do this?
--thank you!
A74096209c78118ff69d50a51129d697?d=identicon&s=25 Jason Lillywhite (jlillywh)
on 2008-12-18 06:53
I understand that I could do

class Fruit1 < Fruit2

but what if I have methods I want to use from many files? This
inheritance only works for one?

Should I resort to modules?
C40020a47c6b625af6422b5b1302abaf?d=identicon&s=25 Stefano Crocco (crocco)
on 2008-12-18 09:08
(Received via mailing list)
Alle Thursday 18 December 2008, Jason Lillywhite ha scritto:
> I want to use this class in a different file called fruit1.rb which
> p apple.color
> apple = Fruit2.new
> p apple.taste
>
> I know the way I'm creating my apple object is wrong because I
> over-wrote apple when I assigned Fruit2.new. What I want to do is have a
> way to call attributes of a single object from different files. In my
> application, I have so many methods, I want them in different files, but
> want to use them on a single object. Is there an easy way to do this?
> --thank you!

I'm not sure I understand correctly what you mean. In ruby, you can
re-open a
class after it's been defined. This means you can put the taste method
in one
file and the color method in another one, both in the same class:

#in fruit2.rb
class Fruit
  def taste
    "sweet"
  end
end

# in fruit1.rb

class Fruit
  def color
    "red"
  end
end

apple = Fruit.new
puts apple.taste
puts apple.color

I hope this helps

Stefano
A74096209c78118ff69d50a51129d697?d=identicon&s=25 Jason Lillywhite (jlillywh)
on 2008-12-18 17:30
I didn't know you could re-open classes like that. I've done this in
irb, but I didn't realize this for actual files. This is the solution I
need. Thanks!
This topic is locked and can not be replied to.