使用tryRecv编译错误

时间:2015-07-03 15:16:30

标签: channel nim

我有以下Nim程序:

import threadpool

var channel: TChannel[string]

proc consumer(channel: TChannel[string]) =
  let (flag,msg) = tryRecv(channel)
  if flag:
    echo msg

channel.open()
spawn consumer(channel)
channel.send("hello")
channel.close()
sync()

当我尝试编译它时,它会给我这个错误消息:

testchannels.nim(6, 27) Error: type mismatch: got (TChannel[system.string])
but expected one of: 
system.tryRecv(c: var TChannel[tryRecv.TMsg])

我不明白错误消息试图告诉我的内容......

1 个答案:

答案 0 :(得分:1)

啊,我想我现在明白了!

错误消息的重要部分是var中的system.tryRecv(c: var TChannel[tryRecv.TMsg]):tryRecv期望通道变量是可变的,它不在上面的代码中。

解决方案是从使用过程中删除参数:

import threadpool

var channel: TChannel[string]

proc consumer() {.gcsafe.} =

  if peek[string](channel) != -1:
    echo recv(channel)

channel.open()
spawn consumer()
channel.send("hello")
channel.close()
sync()