我知道Lisp和Scheme程序员通常会说eval
除非必要,否则应该避免.我已经看到了几种编程语言的相同建议,但我还没有看到一个反对使用的明确论据列表eval
.我在哪里可以找到使用中潜在问题的说明eval
?
例如,我知道GOTO
程序编程中的问题(使程序难以理解且难以维护,难以找到安全问题等),但我从未见过反对的论点eval
.
有趣的GOTO
是,相反的论点应该对延续有效,但我看到Schemers,例如,不会说延续是"邪恶的" - 你在使用时应该小心.他们更倾向于使用代码而eval
不是代码使用continuation(据我所知 - 我可能是错的).
在Lisp中,任何程序的代码实际上都是有效的数据结构.例如,这会将一个和两个加在一起,但它也是三个项目的列表.
(+ 1 2)
Run Code Online (Sandbox Code Playgroud)
这提供了什么好处?是什么让你在其他语言中做到不可能和/或不那么优雅?