如何使用Ramda执行数组中的表达式字符串?
使用Ramda的
R.forEach执行表达式字符串数组 嘿,我来帮你搞定这个Ramda的问题!问题出在R.forEach的参数要求上——它第一个参数需要是可执行的函数,而你的数组里存的是字符串形式的表达式,直接丢给forEach当然不会执行啦。我们只需要加一步:把字符串转成可执行的函数,再交给R.forEach处理就行。
解决方案步骤
先写一个辅助函数,负责把单个表达式字符串转换成可执行的逻辑:
const executeExpr = expr => Function(expr)();这个函数的作用和你之前用的
(Function(...newPIXI))()类似,只不过是针对单个表达式的。用
R.forEach遍历数组,把每个表达式字符串传给这个辅助函数执行:const newPIXI = ["container1 = new PIXI.Container();","container2 = new PIXI.Container();","container3 = new PIXI.Container();"]; R.forEach(executeExpr, newPIXI);
完整示例代码
const newPIXI = ["container1 = new PIXI.Container();","container2 = new PIXI.Container();","container3 = new PIXI.Container();"]; // 辅助函数:执行单个表达式字符串 const executeExpr = expr => Function(expr)(); // 用Ramda的forEach批量执行 R.forEach(executeExpr, newPIXI);
为什么这样能行?
你之前用的(Function(...newPIXI))()是把所有表达式字符串拼接成一个大的函数体一次性执行;而用R.forEach配合辅助函数,是逐个执行每个表达式字符串,最终效果是完全一致的——container1、container2、container3都会被正确赋值为新的PIXI容器实例。
另外要注意:Function()创建的函数会在当前作用域(浏览器是全局window,Node.js或模块环境是模块作用域)执行,所以这些容器变量会被挂载到对应的作用域中,和你原来的执行方式保持一致。
内容的提问来源于stack exchange,提问作者Rio
相关产品推荐
相关产品推荐

