R6RS方案中有没有办法获取当前环境,然后将其作为第二个参数传递给eval
?
例如,下面的表达式要返回 9,问号应该是什么?
(let ((x 4)
(y 5))
(eval '(+ x y) ???))
不,R6RS中没有这样的东西。一些罕见的实现可能支持类似的东西,但绝大多数(包括eval
在其他语言中!)这是无法做到的。
原因很简单:它会破坏编译,因为它会导致两个函数根据本地名称进行区分,并且在某些情况下还可能禁止简单的优化。例如,如果您可以填写一些内容???
那么编译器将需要有两个绑定,即使它们可以被优化掉。在极少数情况下,只要有可能,无论使用什么???
(在某些语言中只是简单地使用eval
) 触发不同的编译,将已知的绑定映射到它们的值。 (有一些奇怪的行为eval
在某些浏览器中,JS 代码中逐字提及,这实际上是同一个问题。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)