了解 OCaml Lwt.return_unit
Understanding OCaml Lwt.return_unit
我正在努力理解 this line:
Icmpv4_socket.connect ()
>>= fun stack ->
定义为here:
let connect () = Lwt.return_unit
Icmpv4_socket.connect ()
解析为 Lwt.return_unit
所以我将此行理解为解析为已完成的 Lwt promite。其中填充的值是参数为stack
的函数。如果我理解正确,为什么承诺中的这个函数有用?谁用 stack
参数调用它?上下文:都在 Lwt 运行
中
Lwt.return_unit
是类型 unit Lwt.t
的现成值,换句话说,一个什么都不做的承诺。 Icmpv4_socket.connect
和 disconnect
都被定义为评估这个什么都不做的值,这意味着它们明确地什么都不做。
Where the value that is filled is a function with paremeter stack
实际上,填充的值是stack
本身。之所以代码这样写:
Icmpv4_socket.connect ()
>>= fun stack ->
...就是先强制connect
函数运行,兑现承诺,再运行函数的内容fun stack -> ...
履行其的承诺。这是通过使用 >>=
(称为 'bind')运算符完成的。 Mirage 人员有一个关于 Lwt 的轻量级线程模型、'bind' 运算符和此类主题的优秀教程:https://mirage.io/wiki/tutorial-lwt
您可能会问,如果 connect
函数实际上什么都不做,为什么它必须 运行?那是因为这个实现细节没有暴露给调用代码。这样的代码只能看到 signature 看起来像:
val connect : unit -> t Lwt.t
所以我们所知道的是我们需要调用 connect ()
,获得一个 Lwt
线程,它给我们一些价值(stack
),然后从那里继续。
我正在努力理解 this line:
Icmpv4_socket.connect ()
>>= fun stack ->
定义为here:
let connect () = Lwt.return_unit
Icmpv4_socket.connect ()
解析为 Lwt.return_unit
所以我将此行理解为解析为已完成的 Lwt promite。其中填充的值是参数为stack
的函数。如果我理解正确,为什么承诺中的这个函数有用?谁用 stack
参数调用它?上下文:都在 Lwt 运行
Lwt.return_unit
是类型 unit Lwt.t
的现成值,换句话说,一个什么都不做的承诺。 Icmpv4_socket.connect
和 disconnect
都被定义为评估这个什么都不做的值,这意味着它们明确地什么都不做。
Where the value that is filled is a function with paremeter
stack
实际上,填充的值是stack
本身。之所以代码这样写:
Icmpv4_socket.connect ()
>>= fun stack ->
...就是先强制connect
函数运行,兑现承诺,再运行函数的内容fun stack -> ...
履行其的承诺。这是通过使用 >>=
(称为 'bind')运算符完成的。 Mirage 人员有一个关于 Lwt 的轻量级线程模型、'bind' 运算符和此类主题的优秀教程:https://mirage.io/wiki/tutorial-lwt
您可能会问,如果 connect
函数实际上什么都不做,为什么它必须 运行?那是因为这个实现细节没有暴露给调用代码。这样的代码只能看到 signature 看起来像:
val connect : unit -> t Lwt.t
所以我们所知道的是我们需要调用 connect ()
,获得一个 Lwt
线程,它给我们一些价值(stack
),然后从那里继续。