这样才是正确的:
    
    
    import asyncnet, asyncdispatch
    
    var sock = newAsyncSocket()
    
    proc onConnect(sock: AsyncSocket, host: string, port: Port) =
      var ft = connect(sock, "127.0.0.1", Port(12345))
      ft.callback = proc (future: Future[void]) =
        echo("Connected in future!")
        for i in 0 .. 50:
          var recvF = recv(sock, 10)
          recvF.callback =
            proc (future: Future[string]) =
              echo("Read ", future.read.len, ": ", future.read.repr)
    
    sock.onConnect("127.0.0.1", Port(12345))
    runForever()
    

你的版本 onConnect 里边的 sock 被认为是 GC 不安全的 --- 编译器认为,搞不好下一次 pull 
的时候,其内存已经不在了,所以不让你编译通过。

但是放在嵌套函数中,Nim 会在内部始终保存其一个副本。

:)

Reply via email to