是否可以取消引用列表中包含的变量以获取其值?例如:
(define one 1)
(define two 2)
(define list '(one two))
(display (list-ref list 0))
此处list-ref
引用one
, 并以字母display
表示one
。可以改为one
取消引用同名变量包含的值吗?
是否可以取消引用列表中包含的变量以获取其值?例如:
(define one 1)
(define two 2)
(define list '(one two))
(display (list-ref list 0))
此处list-ref
引用one
, 并以字母display
表示one
。可以改为one
取消引用同名变量包含的值吗?
eval 绝对可以解决这个问题……但是和大多数 eval 适用的情况一样,它是一把大而危险的锤子。
Matthew Flatt 关于这个主题的博文已成为首选解释:
http://blog.racket-lang.org/2011/10/on-eval-in-dynamic-languages-generally.html
以下是在 Racket 中不使用 eval 的方法。除去杂物,“dict-ref”可以在“关联列表”中找到一个命名元素(或多个元素)。
#lang racket
(define data
'((one 1)
(two 2)))
(define wanted-list '(two one))
;; evaluates to '((2) (1)):
(for/list ([wanted wanted-list])
(dict-ref data wanted))
发生这种情况是因为引用的列表包含两个符号one
和two
. 尝试以下操作:
(display (eval (list-ref list 0)))
解决该符号。