我对红宝石很新,我刚开始昨天。我正在尝试连接到irc服务器,加入频道,打印消息,退出,然后关闭套接字。
require 'socket'
# server information
$host = 'irc.m8chat.net'
$port = 6667
$nick = "m8bot"
$channel = "##bottesting"
s = TCPSocket.open($host, $port)
class Irc
def init
s.write("NICK #{$nick}")
s.write("USER #{$nick} 0 * :#{$nick}")
end
def quit(msg = $nick)
s.write("QUIT :#{msg}")
end
def join(chan = $channel)
s.write("JOIN #{chan}")
end
def send_msg(msg)
s.write("SAY #{$channel} :#{msg}")
end
def cmd(cmd)
s.write(cmd)
end
end
irc = Irc.new
irc.join
irc.send_msg("Hello world")
irc.quit
s.close
这里的问题是s不能在类Irc中使用。我试图在每次出现s之前追加$,虽然我没有得到任何回报,但也没有发生任何事情。我觉得我在这里错过了一些非常简单的东西。
我喜欢一些反馈,谢谢。
答案 0 :(得分:1)
好s
是一个局部变量,除非你传入它,否则你将无法在你的类中使用它。所有的$变量都是全局的,如果可以,你应该避免使用全局变量。我无法告诉你为什么$a
没有效果,但建议您阅读something about dependency injection或the Ruby variable scope。
我不知道你是否出于教育原因这样做,但is help cinch {{3}},即使您不想使用任何这些库,您仍然可以了解如何他们工作。