From: Robert Klemme Date: 2010-01-25T22:52:44+09:00 Subject: Re: Class variable inside block of defining instance method 2010/1/25 Charles Oliver Nutter : > Ruby doesn't scope quite like that normally, but you can do it using > instance_eval and define_method: > > def initialize(server1, server2) >  @echo = echo = IRC::Client.new(*server1) >  @listen = IRC::Client.new(*server2) >  @echo.instance_eval do >    define_method :message_received do |nick, channel, message, *args| >      if channel == "#Pre" >        echo.puts("PRIVMSG #{echo.channel} :#{message}") >      end >    end >  end > end > > instance_eval has some quirks, and define_method methods are never as > fast as normal methods (since they have full block dispatch > semantics), but this should do what you need. Unlikely, since the method was defined on @listen and not @echo. :-) This is probably a better solution: def initialize(server1, server2) @echo = IRC::Client.new(*server1) @listen = IRC::Client.new(*server2) class <<@listen attr_accessor :echo end @listen.echo = @echo def @listen.message_received(nick, channel, message, *args) if channel == "#Pre" echo.puts("PRIVMSG #{echo.channel} :#{message}") end end end Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/