0

splitRubyで使用しようとしていますが、次のエラーが発生します。

`importantFuncs':プライベートメソッド` split'がnil: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
4

2 に答える 2

6

メソッドはstring の代わりにgetPacket戻ります。nilline

これは、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 lineの末尾に追加するだけですgetPacket

于 2012-06-03T20:11:50.310 に答える