R是否使用可应用的顺序约简?

问题描述

我最近在R教程中遇到了这个示例,我发现此语法确实很奇怪,因为它暗示了将参数包装/延迟的正常顺序减少。在应用顺序减少中,类似这样的结果应该导致所有字符串都打印出来。

switch(grade,"A" = print("Great"),"B" = print("Good"),"C" = print("Ok"),"D" = print("Bad"),"F" = print("Terrible"),print("No Such Grade"))

想知道是否有人是私有者并且熟悉R如何实现这一目标?

解决方法

包括UIKit在内的函数参数作为承诺传递,仅在实际使用时才被强制执行(即求值)。参见https://cran.r-project.org/doc/manuals/R-ints.html#Argument-evaluation

一个承诺包括几个部分。它的值位槽在第一次被强制(即访问)时被填充。在此之前,它只是作为未评估的代码,其环境以及指示尚未对其进行评估的组件而存在。

SwiftUI不强制switch

f

给予:

x

library(pryr) f <- function(x) promise_info(x) f(3+pi) 强制x:

$code
3 + pi

$env
<environment: R_GlobalEnv>

$evaled
[1] FALSE

$value
NULL

给予:

g