相关疑难解决方法(0)

为什么eval邪恶呢?

我知道Lisp和Scheme程序员通常会说eval除非必要,否则应该避免.我已经看到了几种编程语言的相同建议,但我还没有看到一个反对使用的明确论据列表eval.我在哪里可以找到使用中潜在问题的说明eval

例如,我知道GOTO程序编程中的问题(使程序难以理解且难以维护,难以找到安全问题等),但我从未见过反对的论点eval.

有趣的GOTO是,相反的论点应该对延续有效,但我看到Schemers,例如,不会说延续是"邪恶的" - 你在使用时应该小心.他们更倾向于使用代码而eval不是代码使用continuation(据我所知 - 我可能是错的).

lisp scheme eval clojure common-lisp

141
推荐指数
8
解决办法
1万
查看次数

如何在lisp中进行两次eval(不使用eval)

如何在保持词汇背景的同时再次评估某些内容?

* (defvar form '(+ 1 2))
form
* form
(+ 1 2)
* (eval form) ;; This loses the lexical scope (not an issue here)
3
Run Code Online (Sandbox Code Playgroud)

有关需要词法范围的问题的示例

(let ((a 1) (b 2)
      (form '(+ a b)))
  (print form)
  (print (eval form))  )
(+ a b) 
The variable A is unbound.
Run Code Online (Sandbox Code Playgroud)

如何在同一个词法范围内两次评估该表格?
我想要多少次eval(在相同的词法范围内)?

与之前的问题相关 为什么SBCL eval函数会丢失它运行的宏?

lisp eval common-lisp

1
推荐指数
1
解决办法
261
查看次数

标签 统计

common-lisp ×2

eval ×2

lisp ×2

clojure ×1

scheme ×1