为何Google Sheets中LET与LAMBDA传入易失性函数时行为不同?
为什么Google Sheets中LET和LAMBDA调用易失性函数的行为不同?
核心差异来自两者对表达式计算时机和缓存机制的处理:
1. LET函数的执行逻辑
LET的工作流程是每次单元格重算时,先依次计算所有命名变量的赋值表达式,再执行最终的返回表达式。
- 对于
=LET(x,RAND(),x),每次表格编辑触发重算时,都会重新执行RAND()生成新的随机数,赋值给x后再返回x,所以结果会随每次编辑更新。
2. LAMBDA即时调用的执行逻辑
当你直接写=LAMBDA(x,x)(RAND())这种即时内联调用形式时,Google Sheets会将RAND()作为实参提前计算,并将结果缓存下来。
- 这里的LAMBDA是“一次性定义并立即执行”,实参
RAND()只在表达式首次计算时运行一次,后续重算时不会重新执行RAND(),而是直接复用之前缓存的结果,所以值固定不变。
补充验证:命名LAMBDA函数的情况
如果先将LAMBDA定义为命名函数(比如MY_FUNC = LAMBDA(x,x)),再调用=MY_FUNC(RAND()),此时每次重算都会重新计算RAND()作为实参传入,结果会和LET一样随编辑更新。这说明差异仅存在于LAMBDA的即时内联调用场景。
内容的提问来源于stack exchange,提问作者The God of Biscuits
相关产品推荐
相关产品推荐

