gpt4 book ai didi

asynchronous - 在 Ocaml Async 中的延迟计算中使用 return

转载 作者:行者123 更新时间:2023-12-04 04:12:20 26 4
gpt4 key购买 nike

我知道这个问题可能看起来很傻,但是每当我搜索以获得相关答案时,我只会得到关于返回值的一般问题,所以......

我正在通过 OCaml 研究延迟计算,我得到了它的基本概念。但是当我阅读有关延迟计算的函数时(主要是来自 Janestreet 的 ASync 文档;https://ocaml.janestreet.com/ocaml-core/111.28.00/doc/async_kernel/#Deferred.t),我看到了返回函数,但我不明白它的用途。

让 x = 返回 1

产生一个立即确定的延迟值,但是如果已经使用延迟计算,那么分配立即值有什么意义呢?为什么不直接给它分配一个正常值呢?是因为其他函数(如绑定(bind)函数)只采用延迟值还是有其他充分的理由?

非常感谢示例。谢谢 :)

最佳答案

你可能会想到return作为创建延迟值的函数。当您在其他递延值的上下文中定义它时,它确实发挥了它的作用。让我们来看这个例子。假设我们有一个函数读取一个字符形式的输入 channel ,并将其大写。

let read_uppercased chan = 
Reader.read_char >>= function
| `Eof -> return `Eof
| `Ok ch -> let ch = Char.uppercase ch in
return (`Ok ch)

在这个函数中,我们实际上有两个使用 return功能。前者确实从常量创建了一个延迟值,实际上我们不需要在 eof 发生之前“等待”来创建这个值。例如我们可以创建一个常量 deferred
let return_eof = return `Eof

并在任何地方使用它。

第二个事件更有趣。它创建了一个延迟值,该值将仅在将来的某个地方确定(或者可能永远不会确定)。但是很酷的想法是,我们实际上不需要等待确定值来定义计算。因此,为了带来 future 的值(value),我们使用 bind函数,然后我们做一些计算,但之后我们需要修复时间流,到 return结果回到 future ......好吧,如果这一切对你来说没有意义,那就把它从你的脑海中抹去。不同的人喜欢不同的比喻。

事实上,也许你更清楚地知道,这个返回只是将一个回调函数连接到其他回调链。

关于asynchronous - 在 Ocaml Async 中的延迟计算中使用 return,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26823701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com