惰性条件评估最有效的方法是什么

What is the Most Rly Way for Lazy Conditional Evaluation

案例。我有一部分代码是这样的:if (exists("mybooleanvar") & mybooleanvar) {statement1} else {statement2}。我希望如果条件被延迟(短路)评估,如果 mybooleanvar 未分配,statement1 将是 运行,如果 mybooleanvar 将调用 statement2 ] 不存在或等于 FALSE。 但在实践中,我收到一个 运行 时间错误,表明 mybooleanvar 的值已被访问并与 TRUE if exists("mybooleanvar") == FALSE 进行比较。所以完整的布尔值计算发生了。

当然,这个问题可以通过封闭的 if 语句来解决,外部语句评估 exists() 和内部语句 - 布尔值。但是我想知道,如果尽管有进一步语句的值,但结果是已知的,那么正确避免评估条件语句的第 n 个成员的最 Rly 方法是什么。 例如,如果 statement1 == FALSEstatement1 & statement2 将是 FALSEstatement1 | statement2TRUE 如果 statement1 == TRUEstatement2 不需要检查(或者至少可以通过编译器指令 {$B-) in Delphi).

这里我会用&&代替&。它们在两个方面有所不同(参见 ?"&&"):

The shorter form performs elementwise comparisons ...

和:

The longer form evaluates left to right examining only the first element of each vector. Evaluation proceeds only until the result is determined. The longer form is appropriate for programming control-flow and typically preferred in if clauses.

示例:

foo <- function()
  if (exists("x") && (x)) cat("is TRUE\n") else cat("not existing or FALSE\n")

x <- TRUE
foo()

x <- FALSE
foo()

rm(x)
foo()

可以在 this post 中找到更多内容。