だから私はちょうどラケットに乗っていて、コンピューターと対話するためにキーを使用することを考えていました.キーはラケットによって文字列として解釈されます. 私は自分のコードの最適化を探していて、文字列またはシンボルの操作がより高速かどうか疑問に思っていました。
2531 次
1 に答える
10
可能なキーのセットが明確に定義されている場合は、記号を使用します。それ以外の場合は、文字列を使用してください。
文字列とシンボルの主な違いは、シンボルが (デフォルトで) internedであることです。文字列を使用すると、内容が同じでオブジェクトが異なる複数の文字列を使用できます (これらは として比較されませんeq?
)。シンボルでは、同じ内容を持つ 2 つのシンボルは同じオブジェクトであることが保証されます。
この利点は、文字列の場合はまたはeq?
を使用する必要があるのに対し、 を使用してシンボル比較を実行できることです。string=?
equal?
ただし、この魔法を実現するために、Scheme の実装は、基本的には文字列からシンボルへのハッシュ テーブルのようなインターン プールを維持します。呼び出しstring->symbol
たときに文字列がまだインターン テーブルにない場合は、文字列 (およびそれに対応するシンボル) がテーブルに追加されるため、可能なキーのセットが明確に定義されていない場合は、インターン テーブルをきれいにジャンクアップできます。早く。
編集:「キー」と言うとき、キーボード文字を意味していましたか? これは間違いなく明確に定義されたセットなので、シンボルを使用できます。
于 2013-02-09T05:45:27.163 に答える