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

Bil*_*dri 0 lisp scheme common-lisp

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

> (defvar s 3) 
> S
> (symbol-value (intern "S"))
> 3
Run Code Online (Sandbox Code Playgroud)

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

编辑:我找到了这个解决方案,但我不能使用eval,因为它在顶层评估.寻找替代品.

(eval (string->symbol "s"))
Run Code Online (Sandbox Code Playgroud)

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

Syl*_*ter 5

不要那样做!

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

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