字符串与符号

时间:2013-02-09 05:15:11

标签: scheme racket

所以我只是在拍球,并且正在考虑使用键与计算机进行交互,并且通过球拍将键解释为字符串。我正在寻找我的代码的优化,并想知道字符串或符号是否更快运行。

1 个答案:

答案 0 :(得分:7)

如果定义了一组可能的键,请使用符号。否则,请使用字符串。

字符串和符号之间的主要区别在于符号(默认情况下)为interned。对于字符串,您可以拥有多个具有相同内容但是不同对象的字符串(它们不会比较为eq?)。对于符号,保证两个具有相同内容的符号是同一个对象。

这样做的好处是您可以使用eq?进行符号比较,而对于字符串,您必须使用string=?equal?

然而,为了让这种魔力在幕后发生,Scheme实现维护一个实习池,它基本上就像一个字符串到符号的哈希表。如果你调用string->symbol并且字符串不在实习表中,它会将字符串(及其相应的符号)添加到表中,所以如果你的可能键集合没有明确定义,你可以垃圾很快就上了实习生表。


编辑:当你说“键”时,你的意思是键盘字符吗?这绝对是一个定义明确的集合,因此您可以使用符号。