问题标签 [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.

0 投票
1 回答
123 浏览

macros - `apply` 或 `funcall` 用于宏而不是函数

在 Lisp 中,函数的参数在进入函数体之前首先被求值。宏参数保持不被评估。

但有时,人们想将存储在变量中的代码片段注入到宏中。这意味着首先评估宏的参数,然后将选择的宏应用于此评估结果。

不得不求助于

实现这一点 - 但eval在不同的环境中行为不正确。

最好的事情是,如果可以做到:

或者

但是由于宏不是一个函数,所以这是行不通的。

有可能实现这样的目标吗?- 为了规避这个问题,让宏在函数命名空间中可用?

还是我错过了解决此类问题的其他方法?

我在尝试回答如何从列表中生成 HTML 时遇到了这个问题。但也在通用 lisp 中使用宏生成 TYPECASE 中评估传递给在 lisp 中生成函数的宏的参数,以及如何在方案中将列表转换为代码/lambda?. 但我一直认为,在回答他们时,最好有一个可以接受宏的apply或类似的函数。funcall