在包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
为了帮助我更好地理解上面的例子,有人可以解释一下父承诺是什么,以及它是否/如何与常规承诺不同?
答案 0 :(得分:13)
没有什么特别的东西叫做父母的承诺。&#34;只有承诺。但承诺可能会指向另一个承诺。 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