【发布时间】:2010-07-16 17:20:15
【问题描述】:
我希望能够在访问变量之前测试它是否已定义。
我喜欢有一个指定“调试级别”的全局变量。如果调试级别为 0,则不提供额外输出。当大于 1 时,给出调试输出,数字越大越详细。
如果我还没有开始定义它,我还想设置它以便程序运行,并假设级别 0。类似于:(defined? 是我不知道该怎么做的魔法?
(if (and (defined? debug-level) (> debug-level 1))
(diplay "Some debugging info"))
我查看了The Scheme Programming Language, 4th Edition 中的表格摘要。我认为唯一有可能的是identifier?。它没有用。
我正在使用 SISC 1.16.6(声称符合 R5RS)和 Chez Petite Scheme v8(声称符合 R6RS)
编辑我尝试用guard 包装eval,例如:
(guard (x (else #f)) (eval 'debug-level))
由于引用了'debug-level,它可以被评估并传递给eval。然后当eval 尝试评估它时,会发生一个错误,我希望guard 能抓住它。它没有。
EDIT 2 我意识到我想将调试跟踪包装到一个单独的过程中,并且定义该过程的文件也可以定义debug-level,默认值为0。使用的原因一个单独的过程是为了减少过程中有效的行数,并在需要时允许调试输出的重定向。
【问题讨论】:
标签: scheme