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