11

在包pryr中,有一个名为parent_promise.

我知道什么是 promise,但我不熟悉这个词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

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

4

1 回答 1

13

没有什么特别的东西叫做“父母承诺”。只有承诺。但是一个承诺可能指向另一个承诺。该parent_promise函数基本上沿着承诺链向上走,以找到第一个非承诺。

所以当你打电话时f(x),那又会g(y)y (promise)-> x. 由于您从不评估,因此该参数作为对withy的承诺传递。所以h(z)z (promise)-> y

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

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

于 2014-08-27T01:34:26.267 回答