我正在尝试获取一个字符串,并将其转换为变量名称.我虽然(make-symbol)或(实习生)会这样做,但显然它不是我想要的,或者我错误地使用它.
例如:
> (setf (intern (string "foo")) 5)
> foo
5
Run Code Online (Sandbox Code Playgroud)
在这里,我将尝试创建一个名为'foo'的变量,其值为5.除此之外,上面的代码给出了一个错误.我正在寻找什么命令?
我对 Racket 很陌生,我尝试运行Chris Jester-Young的解决方案(How to conversion string to variable-name in schema)将字符串转换为变量名(及其相反,换句话说,将变量名转换为细绳):
#lang racket
(define-syntax string->variable-name
(lambda (stx)
(syntax-case stx ()
((_ str)
(string? (syntax->datum #'str))
(datum->syntax #'str (string->symbol (syntax->datum #'str)))))))
(define-syntax variable-name->string
(lambda (stx)
(syntax-case stx ()
((_ id)
(identifier? #'id)
(datum->syntax #'id (symbol->string (syntax->datum #'id)))))))
Run Code Online (Sandbox Code Playgroud)
这对于 来说很好variable-name->string,这里是一个例子:
>(define myvar 10)
>(variable-name->string myvar)
"myvar"
Run Code Online (Sandbox Code Playgroud)
但是,我没有成功string->variable-name:
>(define (string->variable-name "myvar2") 4)
error define: not an identifier, identifier with default, or keyword
for procedure argument …Run Code Online (Sandbox Code Playgroud)