From: Michael Malone Date: 2009-04-03T11:17:28+09:00 Subject: Re: Class in a Class problem denize.paul@gmail.com wrote: > My intent is to create a class that has access to call a method in an > instantiation of another class > Here be dragons. Have you considered the inheritance idea? If a class *needs* access to another class's private variables, then the functionality either belongs in the same class or a child class. Whilst this is technically legal, it really doesn't bode well. If you absolutely need Class A to have exactly one instantiation of Class B you might want to consider the Singleton design pattern for class B. Which in ruby is _really_ difficult to implement... include singleton #(or something along those lines) :) and for B to be a class variable of A (@@b = B.new) which, if they act like Java statics (and I think they do) the class variable has one instantiation able to be accessed from any object of the class. e.g class B def initialize() end def to_s "This is class #{class}" end end class A @@b = B.new() def intitialize() puts @@b end end But in truth, you will have to be a little less generic to get a better answer. If you can give more details of what you're trying to achieve, then please do, and I'll try and give better help. Michael > However my knowledge of Ruby classes (Ok classes in general) is > somewhat lacking > > The example below is a LOT simplified But I need class B to call a > method within an instantiation of class A's. > > one alternative is to seperate the classes and then just do "b=B.new > (a)" but I think that looks really messy and > - I have then to check a bunch of stuff about the parameter a > - I would have a world of more hurt trying to ensure that only one B > instantiation pointed to each a > > Can anyone help? Or tell me that I am doing this all wrong. > > > Paul > > ----- > > class A > class B > def initialize() > puts "b init" > print_stuff() > end > end > > def B > return B > end > > def print_stuff() > puts "here" > end > end > > a = A.new() > b = a.B.new() > > ======================================================================= This email, including any attachments, is only for the intended addressee. It is subject to copyright, is confidential and may be the subject of legal or other privilege, none of which is waived or lost by reason of this transmission. If the receiver is not the intended addressee, please accept our apologies, notify us by return, delete all copies and perform no other act on the email. Unfortunately, we cannot warrant that the email has not been altered or corrupted during transmission. =======================================================================