1

我正在创建一个聊天服务器,并且我有一个处理登录的函数。存在一个名为 nick 的预设 ref 和一个预设输入流 imp。我的代码如下:

let handle_login nr (inp,outp) = 
Lwt_io.printl "<Enter your 'nick'name>" >>= Lwt.return(nick := (Lwt_io.read_line inp))

但是,这段代码给了我错误:

Error: This expression has type string Lwt.t
       but an expression was expected of type string.

我知道以下代码确实有效:

let handle_login nr (inp,outp) = 
Lwt_io.printl "<Enter your 'nick'name>" >>= Lwt.return(nick := "Jane")

简而言之,我不知道如何将 vars 分配给从线程获得的值。

4

1 回答 1

1

我不是很熟悉Lwt,但如果它像任何其他单子一样工作,我认为这应该工作:

let handle_login nr (inp, outp) = 
  Lwt_io.printl "<Enter your 'nick'name>"
  >>= fun () -> Lwt_io.read_line inp
  >>= fun str -> Lwt.return (nick := str)

但我也必须指出,从异步代码中改变共享状态是一场等待发生的灾难。你做到这一点并不意味着你应该这样做。

于 2019-04-15T06:26:02.040 回答