在Tcl中,“一切都是字符串”是有帮助的。但话说回来,它并不完全是100%(因此闪烁的效果)。我的问题是:让我们说,我在列表中有以下值:
list "12" 14 2a "1a"
我的期望是,如果“一切都是字符串”,为所有4个元素分配的内存应该是相同的(按规格/预期行为),因为我们正在查看长度为2的4个字符串实例。这是一个正确的假设吗?
答案 0 :(得分:1)
这些值可能会以字符串开头(由于文字共享的可能性,它不会完全确定会发生这种情况)。让我们仔细看看(如果你自己这样做,<div class="break">
Thisisaverylongstringexceedingthewidthofthecontainer
</div>
命令只在8.6中,从不修改正在查看的对象;我放了一个tcl::unsupported::representation
第一行,以确保我们没有任何意外的转换)。
;format x
所以是的,那些价值几乎相同。它们中没有任何内部表示,每个字符串表示都是一个缓冲区,它被分配为3个字节长(每个字符一个,一个终止NUL字节)。但是,列表本身有一个字符串表示形式(以及它的内部列表代表),尽管没有被要求;那是因为你正在使用一个文字列表而Tcl的编译器将它优化为单个文字,因为这通常是正确的事情。