我在Racket中很新,我尝试过在其他语言中做一些非常简单的事情,例如PHP,它将字符串转换为变量名。 类似的东西:
#lang racket
(define t0 3)
(display t0) ; It outputs 3
(define (symbol? (string->symbol "t1")) 2 )
(display t1) ; It would output 2, however it throws an error :(
有没有办法将字符串转换为标识符?因为我需要动态地从字符串中定义变量名。
答案 0 :(得分:2)
你可以在名称空间的帮助下做你想做的事。但是首先要查看哈希表。
#lang racket
(define-namespace-anchor here)
(define ns (namespace-anchor->namespace here))
(define foo 42)
(parameterize ([current-namespace ns])
(namespace-variable-value (string->symbol "foo")))
该程序的输出为42。
答案 1 :(得分:1)
确实soegaard哈希表是一个非常好的解决方案,这是一个例子:
#lang racket
(define ht (make-hash))
(define sx "x")
(define sy "y")
(define sr "r")
(hash-set! ht sx 2)
(hash-set! ht sy 3)
(define r (+ (hash-ref ht sx) (hash-ref ht sy))) ;do calculation (+ 2 3)
(hash-set! ht sr r)
(hash-ref ht sr) ; it will output 5