Advanced R中的惰性评估

时间:2019-06-14 12:04:28

标签: r lazy-evaluation

x_ok <- function(x) {
!is.null(x) && length(x) == 1 && x > 0
}

x_ok(1)
#> [1] TRUE
x_ok(1:3)
#> [1] FALSE

通过通过&&而不是&组合断言来达到所需的行为。 &&不执行元素比较。相反,它仅使用每个值的第一个元素。在评估

的意义上,它还使用了惰性评估
  

“仅继续进行直到确定结果为止”

(来自?Logic)(来自Advanced.R)

惰性求值不是针对函数中的方程的论证,而是这句话

  

在评估“仅在确定结果之前进行”的意义上,它还使用了惰性评估。

说评估完成与功能的内容有关。为什么?

1 个答案:

答案 0 :(得分:1)

&&不能在元素上起作用,而是使用短路。这个想法是,如果LHS为FALSE,则&&的RHS可能无效,但这是可以的,因为在那种情况下从不评估RHS。例如,如果对RHS进行评估,则会在此处生成错误,但由于LHS为FALSE,因此永远不会生成错误。

x <- "A"
is.numeric(x) && x + 1 < 0

如果该方法无法正常工作,则必须使用更长的时间:

if (is.numeric(x)) x + 1 < 0 else FALSE