有没有一种简单的方法可以将字符串转换为Racket中的变量名称(标识符)?

时间:2016-08-20 16:52:33

标签: string racket identifier

我在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 :(

有没有办法将字符串转换为标识符?因为我需要动态地从字符串中定义变量名。

2 个答案:

答案 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