我们如何使用方案语言中的字符串获取变量值,因为我们可以在Common Lisp中实现这一点:
> (defvar s 3)
> S
> (symbol-value (intern "S"))
> 3
我从闭包中访问父函数的参数。
编辑:我找到了这个解决方案,但是我无法使用eval,因为它在顶级评估。寻找替代方案。
(eval (string->symbol "s"))
编辑2:我发现Common lisp代码也尝试在全局空间中查找符号。所以这个问题基本上都适用于Lisps(Common Lisp,Scheme)。
答案 0 :(得分:5)
不要这样做!
变量用于在编译时知道变量。在这种情况下,永远不会一个字符串。您仍然可以在编译时对字符串进行推理,但您的代码也需要与名称建立关系才能使其变得有趣。当您使用eval
或其他评估结构并在运行时编译/运行数据的表单时,您可能做得不对(但并非总是如此。我在我20年的职业生涯中故意使用eval
在生产代码中两次)
如果要存储值,请使用数据结构。一个assoc会模仿动态环境。如果大小无害,您还可以使用带有关卡指示符的哈希。