使用scheme中的字符串获取变量值

时间:2017-11-29 11:43:21

标签: scheme lisp common-lisp

我们如何使用方案语言中的字符串获取变量值,因为我们可以在Common Lisp中实现这一点:

> (defvar s 3) 
> S
> (symbol-value (intern "S"))
> 3

我从闭包中访问父函数的参数。

编辑:我找到了这个解决方案,但是我无法使用eval,因为它在顶级评估。寻找替代方案。

(eval (string->symbol "s"))

编辑2:我发现Common lisp代码也尝试在全局空间中查找符号。所以这个问题基本上都适用于Lisps(Common Lisp,Scheme)。

1 个答案:

答案 0 :(得分:5)

不要这样做!

变量用于在编译时知道变量。在这种情况下,永远不会一个字符串。您仍然可以在编译时对字符串进行推理,但您的代码也需要与名称建立关系才能使其变得有趣。当您使用eval或其他评估结构并在运行时编译/运行数据的表单时,您可能做得不对(但并非总是如此。我在我20年的职业生涯中故意使用eval在生产代码中两次)

如果要存储值,请使用数据结构。一个assoc会模仿动态环境。如果大小无害,您还可以使用带有关卡指示符的哈希。