excel“LET”函数是否执行惰性求值 - 是否实际求值未使用的名称值对

问题描述 投票:0回答:1

假设你有以下公式:

LAMBDA(returnVar_,
LET(
  let_var1, XLOOKUP(...),
  let_var2, XLOOKUP(...),
  delta, let_var1 - letvar2,
  SWITCH(returnVar_,
         "let_var1", let_var1,
         "let_var2", let_var2,
         "delta", let_var1 - letvar2))("let_var1")

在这种情况下,excel 是否评估“let_var2”和“delta”,或者仅根据需要评估“let_var1”、“let_var2”或“delta”是否节俭/高效?

根据下面的微软参考资料,我知道如果不需要,“let”可以有效地不多次评估项目。但是,我无法找到有关它是否在所有情况下至少评估一次的信息:

https://support.microsoft.com/en-us/office/let-function-34842dd8-b92b-4d3f-b325-b8b8f9908999

excel lambda excel-365
1个回答
0
投票

感谢@GSerg、@BigBen、@DS_London。您的所有评论都为我指明了测试行为的正确方向。

我使用注释对 let、switch 和 if 函数以及 MMULT 计算/数据生成进行了一些测试,根据观察到的性能,其行为如下:

支持功能:

fn_MMULTData =LAMBDA(n,MMULT(RANDARRAY(n, n), RANDARRAY(n, n)))

testLet = LAMBDA(_returnVar,LET(aPlusb, 1 + 1, c, fn_MMULTData(1000), aPlusb))

testSwitch = LAMBDA(_returnVar,SWITCH(_returnVar, "aPlusb", 2, "c", fn_MMULTData(1000)))

testIF = LAMBDA(_returnVar,IF(_returnVar = "aPlusb", 2, fn_MMULTData(1000)))

语句的顺序并不重要,除了 IF 语句之外,将内容包装在辅助 LAMBDA 中也无关紧要。当 fn_MMULTData(1000) 匹配条件时,其性能不会因评估而降低。也许有人在微软有联系。

编辑1: CHOOSE 似乎与 switch 结合起来可能是实现所需目的的一种优雅方式:

=LET(_returnVar, "1Plus1",
_returnVarIdx, SWITCH(_returnVar, "1plus1", 1, 2),
CHOOSE(_returnVarIdx, 1+1, fn_MMULTData(1000)))

编辑2: 无论评估顺序如何,CHOOSE 都有效

=LET(_returnVar, "1Plus1",
_returnVarIdx, SWITCH(_returnVar, "1plus1", 2, 1),
CHOOSE(_returnVarIdx, fn_MMULTData(1000), 1+1))
© www.soinside.com 2019 - 2024. All rights reserved.