我正在尝试在Ruby中使用split
,但我收到了这个错误:
`importantFuncs':调用nil的私有方法`split':NilClass(NoMethodError)
我尝试添加require String
和require string
,但两者都没有。
require 'socket'
class IRC
def initialize(ip, port)
@s = TCPSocket.new(ip, port)
print 'Now connected to ip ', ip, ' at port ', port, "\n"
end
def getPacket()
line = @s.gets
puts line
end
def closeConnection()
@s.close
end
def sendPacket(packet)
@s.write(packet)
end
def importantFuncs(nick)
sendPacket("NICK #{nick}")
z = getPacket
@m = z.split(':')
sendPacket("NICK #{nick}")
end
#def joinChannel(
end
ip = '127.0.0.1'
port = '6667'
i = IRC.new(ip, port)
i.importantFuncs('test')
i.getPacket
答案 0 :(得分:6)
您的getPacket
方法返回nil
而不是字符串line
。
那是因为在Ruby中,每个方法都默认返回一个值。此值将是方法中最后一个语句的值。您也可以使用return
语句重新定义此行为,就像在其他编程语言中一样,但它在Ruby中并不经常使用。
def getPacket()
line = @s.gets
puts line # returns nil, and whole method returns nil too
end
因此,您应该将@s.gets
作为此方法中的最后一个表达式
def getPacket()
@s.gets
end
如果您确实需要打印此line
,请或添加line
def getPacket()
line = @s.gets
puts line
line
end
答案 1 :(得分:3)
您的getPacket
方法返回nil
。您可能希望它返回line
或其他内容。只需将return line
添加到getPacket
的末尾。