问题标签 [funcall]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macros - `apply` 或 `funcall` 用于宏而不是函数
在 Lisp 中,函数的参数在进入函数体之前首先被求值。宏参数保持不被评估。
但有时,人们想将存储在变量中的代码片段注入到宏中。这意味着首先评估宏的参数,然后将选择的宏应用于此评估结果。
不得不求助于
实现这一点 - 但eval
在不同的环境中行为不正确。
最好的事情是,如果可以做到:
或者
但是由于宏不是一个函数,所以这是行不通的。
有可能实现这样的目标吗?- 为了规避这个问题,让宏在函数命名空间中可用?
还是我错过了解决此类问题的其他方法?
我在尝试回答如何从列表中生成 HTML 时遇到了这个问题。但也在通用 lisp 中使用宏生成 TYPECASE 中,评估传递给在 lisp 中生成函数的宏的参数,以及如何在方案中将列表转换为代码/lambda?. 但我一直认为,在回答他们时,最好有一个可以接受宏的apply
或类似的函数。funcall