Dmi*_*tri 4 ocaml asynchronous
我知道这个问题可能看起来很愚蠢,但每当我搜索以获得相关答案时,我只会得到有关返回值的一般问题,所以......
我正在通过 OCaml 研究延迟计算,并且了解了它的基本概念。但是当我阅读有关延迟计算的函数时(主要是来自 Janestreet 的 ASync 文档;https://ocaml.janestreet.com/ocaml-core/111.28.00/doc/async_kernel/#Deferred.t),我看到了 return功能,但我不明白它的用途。
让 x = 返回 1
产生一个立即确定的延迟值,但是如果已经使用延迟计算,那么分配立即值有什么意义呢?为什么不直接给它赋一个正常值呢?是因为其他函数(如绑定函数)仅采用延迟值还是有其他充分的理由?
非常感谢示例。谢谢 :)
你可能会想到return创建延迟值的函数。当您在其他递延值的上下文中定义它时,它确实发挥了作用。让我们看一下例子。假设我们有一个函数读取 char 形式的输入通道,并将其大写。
let read_uppercased chan = \n Reader.read_char >>= function\n | `Eof -> return `Eof\n | `Ok ch -> let ch = Char.uppercase ch in\n return (`Ok ch)\nRun Code Online (Sandbox Code Playgroud)\n\n在这个函数中,我们实际上有两个return函数的用途。前者确实从常量创建了一个延迟值,实际上我们不需要在 eof 发生之前 \xc2\xabwait\xc2\xbb 来创建这个值。例如我们可以创建一个常量延迟
let return_eof = return `Eof\nRun Code Online (Sandbox Code Playgroud)\n\n并在任何地方使用它。
\n\n第二次发生就更有趣了。它创建了一个延迟值,该值仅在未来某个地方确定(或者可能永远不会确定)。但很酷的想法是,我们实际上不需要等待值被确定来定义它的计算。所以,为了从未来带来一个值,我们使用bind函数,然后我们做一些计算,但之后我们需要修复时间流,并将return结果返回到未来......好吧,如果这一切都没有对你来说没有意义,只需将其从你的脑海中删除即可。不同的人喜欢不同的隐喻。
事实上,也许您更清楚地知道,在幕后这个返回只是将回调函数连接到其他回调链。
\n| 归档时间: |
|
| 查看次数: |
569 次 |
| 最近记录: |