------ art_31218_7012313.1220999776556 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline 2008/9/9 Iñáki Baz Castillo <ibc / aliax.net> > Hi, I'll explain my problem with an example code: > > ----------------------- > module M > def hello > puts "hello !!!" > B.new > end > > class B > def initialize > puts "B instance initialized !!!" > bye() <--- ERROR !!!! > end > end > end > > > class A > include M > > def bye > puts "bye !!!" > end > end > > > a = A.new > a.hello > ----------------------- > > > I want the following behaviour: > > irb> a.hello > => "hello !!!" > => "B instance initialized !!!" > => "bye !!!" > > > But the last bye() gives an error since, of course, "bye" is not defined in > B > class, but in A class. > > I know that if it would be: > ------------------ > module M > > def hello > puts "hello !!!" > bye > end > > end > > irb> a.hellp > ------------------ > This works since "bye()" calls the "bye" method in class A. But this is not > my > case. > > How could I call A#bye method from M::B class? > > Thanks a lot. > To call a method from another class in the context of an instance of B, put this inside M::B#initialize: A.instance_method(:bye).bind(self).call() Hard to tell from this code, seeing as how it does nothing apparently useful, but if you find yourself doing this it may be a sign that you need to rethink your design. ------ art_31218_7012313.1220999776556--