0

我正在尝试split在 Ruby 中使用,但出现此错误:

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

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

2 回答 2

6

您的getPacket方法返回nil而不是 string 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
于 2012-06-03T20:13:41.660 回答
3

您的getPacket方法返回nil. 您可能希望它返回line或其他东西。只需添加return linegetPacket.

于 2012-06-03T20:11:50.310 回答