2011-08-15 16 views
1

次のコードは#f生成し、#t文字列を使用してシンボルを参照するにはどうすればよいですか?

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

は基本的に、私は、文字列"dict"は、私はそれをどのように行うことができます行1で定義されたハッシュdictに変換されますしたいですか?

+1

ハッシュテーブルに 'dict'を入れて見てください。 –

+0

@ Jeremy:タイトルを編集してくれてありがとう。私はそれが私が求めようとしていたものだと思います。 –

答えて

2

そうのような最も簡単な方法は、evalstring->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と動作するはずです。

+3

この目的のために 'eval'を使うのは間違っています。 –

+2

また、この回答は、デフォルトのラケット名ではないR6RS関数を使用していることに注意してください。 '#lang racket'では、' make-hash'と 'hash-set! 'などを使います。 –

+3

+1は、「evalが関与する」ことは、決して正しいことではありません。 Racketのevalの制限については、http://docs.racket-lang.org/guide/eval.html –

関連する問題