案子。我有一部分代碼是這樣的:if (exists("mybooleanvar") & mybooleanvar) {statement1} else {statement2}. 我希望如果條件是懶惰(短路)評估的,如果未分配astatement1將運行,如果不存在或 equals將被呼叫。但在實踐中,我收到了一個運行時錯誤,表明該值已被訪問并與if進行比較。因此,發生了完整的布爾評估。mybooleanvarstatement2mybooleanvarFALSEmybooleanvarTRUEexists("mybooleanvar") == FALSE
當然,這個問題可以通過封閉的 if 陳述句來解決,其中外部的評估exists()和內部的 - 布林值。但是我想知道如果盡管有更多陳述句的值而結果已知,那么正確避免評估條件陳述句的第 n 個成員的最可靠的方法是什么。例如statement1 & statement2將是FALSEif statement1 == FALSE。statement1 | statement2是否TRUE需要檢查(statement1 == TRUE或者statement2至少可以通過 Delphi 中的編譯器指令之類的東西關閉此檢查{$B-))。
uj5u.com熱心網友回復:
在這里,我將使用&&而不是&. 它們在兩個方面有所不同(參見?"&&"):
較短的形式執行元素比較...
和:
較長的形式從左到右評估,僅檢查每個向量的第一個元素。僅在確定結果之前進行評估。較長的形式適用于編程控制流,通常在 if 子句中首選。
例子:
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()
更多可以在這篇文章中找到。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/483639.html
下一篇:對具有現有資料的行應用陣列公式
