在 5.2 中使用沙盒加载 Lua 函数块并修改环境

此问题类似于 修改 Lua 函数块环境,但有一些不同之处。

我想加载字符串作为可重用的 Lua 函数,它们都共享同一个沙盒进行评估,但是每次调用我都可以传递不同的变量值。

例如,假设我想评估方程式 round(10*w/h) + a * b,其中 roundwh 都是常规沙盒环境中的值,但是 ab 则是我希望每次评估方程式时修改的值。

这个问题 展示了如何动态更改编译函数的环境。但是,它会设置函数的 ENTIRE 环境,而没有我的后备沙盒。

有什么高效的方法可以实现我的目标?请注意,我几乎只关心评估函数所需的时间,而不是设置时间。


目前,用户编写的 CSS 表达式如下所示:

box {
   left: @x;
   width: viewwidth - @w;
}

其中 @x@w 是框元素的属性(本地变量),而 viewwidth 是在其他地方设置的一个表级变量(我的沙盒)。每个属性值——: 后面的部分——都被解析为要编译成 Lua 函数的字符串。它们使用常规的 Lua 语法,除非我当前将 @_el. 交换以取消元素表的引用。

对于此问题的答案,可以保持此相同的语法并要求区分本地变量和表变量,但也可以采用消除 @ 符号并将所有变量视为相同的解决方案。

点赞