我对tcl很新,我希望能够熟练使用这种语言,所以我想我应该问一下,为什么某些示例代码在代码中有stdout而有些只是使用puts。这本书似乎没有解释这一点。 IDE是否已更新为自动承担stdout?
答案 0 :(得分:3)
puts
命令写入stdout,如果你没有为它提供一个频道名称(并且自从......以来一直这样工作)。如果你愿意,你可以把它放进去或放弃它;没关系,但如果以某种方式完成,可能会使事情变得更清楚。让它成为你的选择。 puts
唯一的强制参数是要写的字符串。
在性能方面,省略该值稍微更快,但你应该忽略这一点,因为与IO的成本相比,查找的额外成本绝对是微不足道的。表达清晰度是选择其中一个的唯一正当理由。
有一种情况很重要。如果您想编写默认情况下写入标准输出的代码,但是您可以覆盖它以写入文件(或套接字或管道或...),那么将通道名称存储在变量中会更容易(默认设置为stdout
,当然)。就像那样,你的所有代码都是相同的,只有一点:close stdout
通常不是一个好主意。使用这样的代码很容易避免:
# Also don't want to close stdin or stderr...
if {![string match std* $channel]} {
close $channel
}