【发布时间】:2013-06-30 11:31:44
【问题描述】:
Let Over Lambda Chapter 3 Section 'Unwanted Capture' 说:
“当然我们可以想出足够稀有的名字,这样问题就永远不会出现了。是的,在很多情况下,包和智能变量命名可以解决变量捕获的问题。但是,大多数严重的变量捕获错误不会出现在由程序员直接创建的代码中。大多数变量捕获问题仅在其他宏以您未预料到的方式使用您的宏(与您的宏结合)时才会出现。"
然后它没有给我一个粗体部分的例子。这样的例子之一是什么?想象一个假想的 Lisp 开发团队,其疯狂的老板禁止使用 gensym 或任何会创建 uninterned 符号的东西,而程序员只要在错过 gensym 时就简单地投掷字母数字骰子来想出诸如 temp-27s63f8sk2n 或 sum-3t84hj4df 之类的随机变量名称。什么是团队会遇到麻烦的例子?
说到这里,Emacs 24.3.1 定义了 dotimes 和 dolist ,没有使用 uninterned 符号。很奇怪。
【问题讨论】:
-
为什么人们投票结束这个?这是一个真实而复杂的问题。