我正在查看Tk演示小部件8.5 / 8.6并找到了内线:
eval destroy [winfo child .]
当我查找winfo
时,没有child
选项,但有一个children
选项。我用两个测试了一些东西,看起来是一样的。
% package require Tk
% pack [label .m1 -text "Hello"]
% pack [label .m2 -text "World"]
% puts [winfo child .]
.m1 .m2
% puts [winfo children .]
.m1 .m2
这两个对我来说似乎是一样的,但有一个是有记录的,另一个则没有。是否存在任何差异,或者仅仅是不同版本的Tcl的结果(似乎child
之前使用过children
现在被{{1}}替换 - 可能是因为一个错误? - 虽然两者都表现出来大致相似)?
如果它们不同,是否有人会使用一个而不是另一个?
答案 0 :(得分:4)
Tcl允许您将任何命令缩写为最接近的非模糊子字符串。例如:
% string range abcd 0 2
abc
% stri ran abcd 0 2
abc
% str r abcd 0 2
unknown or ambiguous subcommand "r": must be bytelength, compare, equal, first, index, is, last, length, map, match, range, repeat, replace, reverse, tolower, totitle, toupper, trim, trimleft, trimright, wordend, or wordstart
%
最后一行有一个模糊的匹配 - r可以匹配任何范围,重复,替换或反转,所以我们得到一个错误。 ra
是此处range
可能的最短匹配。
适用于此的具体文档实际上位于Tcl_GetIndexFromObj的手册页中,其中是状态
如果objPtr的字符串值与tablePtr中的某个字符串相同,或者如果它是tablePtr中的一个字符串的非空唯一缩写并且未指定TCL_EXACT标志,则会发生匹配
这是因为Tcl_GetIndexFromObj
API调用通常是在整个Tcl源中识别命令和子命令的方式。