将 ref 设置为绑定线程链中 Lwt_io.read_line 的结果
Seting a ref to the result of a Lwt_io.read_line in a chain of bound threads
我正在创建一个聊天服务器,并且我有一个处理登录的函数。存在一个名为 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 分配给从线程中获取的值。
我对 Lwt
不是很熟悉,但如果它像任何其他 monad 一样工作,我认为这应该有效:
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)
但我还必须指出,从异步代码改变共享状态是一场等待发生的灾难。你可以做这件事当然并不意味着你应该。
我正在创建一个聊天服务器,并且我有一个处理登录的函数。存在一个名为 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 分配给从线程中获取的值。
我对 Lwt
不是很熟悉,但如果它像任何其他 monad 一样工作,我认为这应该有效:
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)
但我还必须指出,从异步代码改变共享状态是一场等待发生的灾难。你可以做这件事当然并不意味着你应该。