[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Class method access instance variable?

Finn Koch

8/23/2007 2:16:00 AM

Hi, I'm just learning ruby and I'm working on a server connection. I
have the following code:

class IRCBot

....


def connect
puts "Connecting to #{@server}..."
@conn = TCPSocket.new( @server, @port )
handle_server_registration
end
end


I have another class that needs to perform a '@conn.send("asdf",0)'.
Can anyone help me figure out how I can have this external class access
the @conn instance variable?

Thanks!

upenox
--
Posted via http://www.ruby-....

8 Answers

Finn Koch

8/23/2007 2:38:00 AM

0

Daniel ----- wrote:
> On 8/23/07, Finn Koch <splitform@gmail.com> wrote:
>> puts "Connecting to #{@server}..."
>> Thanks!
>>
>> upenox
>> --
>
>
> Don't access the @conn instance variable directly.
>
> Use an attr_accessor in the class IRCBot and the just ask for the
> @irc_bot_instance.conn
>
> HTH
> Daniel

Thanks for the response :)

I have tried this, with no luck. I have an external file that creates
the new instance of IRCBot:

mybot = IRCBot.new


I tried referring to it as 'mybot.conn.send("asdf", 0)', but that didn't
work.

Here is the external file that gets loaded:

class IRCCallback
def self.check_next( input )
mybot.conn.send("PRIVMSG matt-mb :hey-o", 0)
puts "irc callback working"
end

end

So I guess to sum up, I have mybot.rb which contains the "mybot =
IRCBot.new", the IRCBot.rb which contains the method in my original
post, and I have the IRCCallback.rb which gets loaded prior to calling
the function which in turns calls the method in IRCBot.rb.

Thanks again! :)
--
Posted via http://www.ruby-....

David A. Black

8/23/2007 12:10:00 PM

0

Finn Koch

8/23/2007 1:27:00 PM

0

Daniel ----- wrote:
> On 8/23/07, Finn Koch <splitform@gmail.com> wrote:
>> > Don't access the @conn instance variable directly.
>> the new instance of IRCBot:
>> def self.check_next( input )
>>
>> Thanks again! :)
>> --
>> Posted via http://www.ruby-....
>
>
> Can you http://pastie... your relevant code. In it's entirety.
> I
> can't see where in IRCCallback mybot is defined etc.
>
> It would sure help to see these.
>
> Thanx
> Daniel


http://pastie...90341

--
Posted via http://www.ruby-....

David A. Black

8/23/2007 1:56:00 PM

0

Finn Koch

8/23/2007 2:41:00 PM

0

David A. Black wrote:
> Hi --
>
> On Thu, 23 Aug 2007, Finn Koch wrote:
>
>>>
>> http://pastie.cabo...
> In this:
>
> class IRCCallback
> def self.check_next( input )
> ro.conn.send("PRIVMSG testuser :hey", 0)
> puts "irc callback working"
> end
> end
>
> I don't see where ro is being defined.
>
>
> David

Oh, sorry, that should read 'mybot.conn.send("PRIVMSG testuser :hey",
0)'

That's what I was trying last night.
--
Posted via http://www.ruby-....

David A. Black

8/23/2007 3:10:00 PM

0

Finn Koch

8/23/2007 3:29:00 PM

0

David A. Black wrote:
> Hi --
>
> On Thu, 23 Aug 2007, Finn Koch wrote:
>
>>> def self.check_next( input )
>> Oh, sorry, that should read 'mybot.conn.send("PRIVMSG testuser :hey",
>> 0)'
>
> OK... (well, not OK :-) but I now know what you meant) but I'm now not
> seeing what purpose the variable 'input' is serving.
>
>> That's what I was trying last night.
>
> mybot is a local variable defined in a completely different scope,
> different both because method definitions have their own local scope,
> and because it's in a different file, either of which would mean it
> was out of scope in your method definition.
>
> You need to pass objects around, and make requests of those objects
> (i.e., send them messages). Local variables are really just scratchpad
> variables for a limited scope.
>
>
> David

Well the 'input' var isn't serving a purpose now. I'm just trying to
get the callbacks and everything working and will be using input at a
later time.

So I could pass @conn to the check_next like so?

IRCCallback.check_next(@conn, @username)

And then have:

class IRCCallback
def check_next(server_connection, username)
do stuff
end
end

Does that look correct?
--
Posted via http://www.ruby-....

Simon Krahnke

8/23/2007 4:36:00 PM

0

* Finn Koch <splitform@gmail.com> (04:38) schrieb:

> I have tried this, with no luck. I have an external file that creates
> the new instance of IRCBot:

Stop thinking of files, Ruby is about objects, it doesn't in which files
statements are, as long as they are processed.

> mybot = IRCBot.new

mybot is a local variable now.

> I tried referring to it as 'mybot.conn.send("asdf", 0)', but that didn't
> work.

What do you mean, what happended? Does IRCBot have an conn method? What
happens if you use mybot.conn? [1]

> class IRCCallback
> def self.check_next( input )
> mybot.conn.send("PRIVMSG matt-mb :hey-o", 0)
> puts "irc callback working"
> end
>
> end

There is no local variable mybot here. Call it $mybot if you want
global variables, but you really shouldn't want that.

Try:

class IRCCallback
attr_accessor :bot

def self.check_next( input )
@bot.conn.send("PRIVMSG matt-mb :hey-o", 0)
puts "irc callback working"
end
end

IRCCallback.bot = IRCBot.new

mfg, simon .... l

[1] Why the hell did BasicSocket redefine Object#send?