Как я могу использовать строку для ссылки на символ? - PullRequest
1 голос
/ 16 августа 2011

Следующий код сгенерирует #f и #t

1: (define dict (hash 1 'a 2 'b ))
2: (hash? (string->symbol "dict"))
3: (symbol? (string->symbol "dict"))

В общем, я хочу, чтобы строка "dict" была превращена в хеш dict, определенный в строке 1. Как я могу это сделать?

1 Ответ

2 голосов
/ 16 августа 2011

Самым простым способом было бы eval результат string->symbol, например, так:

> (define dict 5)
> (eval (string->symbol "dict"))
5

Однако участие eval почти никогда не является правильным решением.Гораздо лучший способ связать строки со значениями - использовать хеш-таблицу, как подсказывает @yi_H:

> (define ht (make-hash))
> (hash-set! ht "dict" 5)
> (hash-ref ht "dict")
5

Обновление : изначально я пропустил тег [racket];пример должен теперь работать с #lang racket.

...