不能在Ruby中使用split

时间:2012-06-03 20:08:54

标签: ruby

我正在尝试在Ruby中使用split,但我收到了这个错误:

  

`importantFuncs':调用nil的私有方法`split':NilClass(NoMethodError)

我尝试添加require Stringrequire 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

2 个答案:

答案 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的末尾。