在TCL中是否存在任何替换命令

时间:2014-02-28 09:00:21

标签: tcl

我正在寻找“puts”的备用命令。是否有替换命令用于放入tcl?如果有的话请告诉我

2 个答案:

答案 0 :(得分:1)

不,Tcl确实没有一堆不同的输出命令。相反,不同的参数组合和与其他命令的合作用于以不同的方式产生输出。例如,可以修改puts以将输出定向到除stdout以外的其他位置(通过提供通道参数),或者不通过换行符结束输出(通过提供-nonewline标志)。格式化输出(如在C' s printf中)可以通过将puts应用于format的输出来生成,就像在

中一样
puts [format "My string is %s" foo]
# => My string is foo

(允许输出多语言的变体:)

# ... insert necessary initialization here ...
puts [::msgcat::mc "My string is %s" foo]
# => Min sträng är foo

所以我们通常会这样做。你有什么特别需要的吗?

答案 1 :(得分:1)

不,您只有puts和(从8.5开始)chan puts,尽管它使用相同的实现代码。但是你可以轻松地制作自己的命令来编写你想要的东西。例如,这是一个简单的编写器,它坚持使用通道名称和数据,将通道配置为以二进制模式工作,在没有换行符的情况下写入数据,然后刷新通道:

proc writeBinary {channelName data} {
    fconfigure $channel -translation binary
    puts -nonewline $channelName $data
    flush $channelName
}

这里的东西很像非常很像C printf()

proc printf {pattern args} {
    puts [format $pattern {*}$args]
}

(我使用更适合日志记录的更复杂版本,以便我可以指定日志记录级别和要写入的消息的详细信息,并在启用时将消息记录到相应的日志目标,方式让人联想到Java的log4j。但你可能不需要那种程度的幻想。)

编写程序以简化操作没有任何问题。 Tcl只提供puts,因为事实证明这足以构建其他所有内容。