问题 什么是家长承诺?


在包中 pryr,有一个叫做的函数 parent_promise

我知道承诺是什么,但我不熟悉这个词 父母的承诺。此外,我并不真正理解文档中的示例,也许是因为我不知道我在寻找什么。

library(pryr)
example(parent_promise)
# prnt_p> f <- function(x) g(x)
# prnt_p> g <- function(y) h(y)
# prnt_p> h <- function(z) parent_promise(z)
# prnt_p> h(x + 1)
# x + 1
# prnt_p> g(x + 1)
# x + 1
# prnt_p> f(x + 1)
# x + 1

为了帮助我更好地理解上面的例子,有人可以解释一下 父母的承诺 是,如果/如何与常规承诺不同?


7624
2017-08-27 01:12


起源



答案:


没有什么特别的东西叫做“父母的承诺”。只有承诺。但承诺可能会指向另一个承诺。该 parent_promise 功能基本上走上了承诺的链条,找到了第一个非承诺。

所以当你打电话 f(x),反过来打电话 g(y) 同 y (promise)-> x。既然你永远不会评价 y,该参数作为承诺传递 h(z) 同 z (promise)-> y。所以

z (promise)-> y (promise)-> x (promise)-> x+1

所以打电话 parent_promise(z) 在链中找到第一个非承诺对象,在每种情况下都是表达式 x+1


13
2017-08-27 01:34



因此,如果父承诺指向另一个承诺,并且评估了父承诺,那是否意味着对链中的所有其他承诺进行评估? - Rich Scriven
我不太清楚我明白你的意思。为了解决承诺,您必须评估链中的所有内容。一旦它解决了,你就不能再向原始承诺指出一个新的承诺,这样他们的链条就不能下降了。 - MrFlick
谢谢,这就是我的要求。 - Rich Scriven
顺便说一下,我现在建议看一下 github.com/hadley/lazy 相关的功能和文档和插图 - hadley


答案:


没有什么特别的东西叫做“父母的承诺”。只有承诺。但承诺可能会指向另一个承诺。该 parent_promise 功能基本上走上了承诺的链条,找到了第一个非承诺。

所以当你打电话 f(x),反过来打电话 g(y) 同 y (promise)-> x。既然你永远不会评价 y,该参数作为承诺传递 h(z) 同 z (promise)-> y。所以

z (promise)-> y (promise)-> x (promise)-> x+1

所以打电话 parent_promise(z) 在链中找到第一个非承诺对象,在每种情况下都是表达式 x+1


13
2017-08-27 01:34



因此,如果父承诺指向另一个承诺,并且评估了父承诺,那是否意味着对链中的所有其他承诺进行评估? - Rich Scriven
我不太清楚我明白你的意思。为了解决承诺,您必须评估链中的所有内容。一旦它解决了,你就不能再向原始承诺指出一个新的承诺,这样他们的链条就不能下降了。 - MrFlick
谢谢,这就是我的要求。 - Rich Scriven
顺便说一下,我现在建议看一下 github.com/hadley/lazy 相关的功能和文档和插图 - hadley