【问题标题】:extra characters after close-brace大括号后的多余字符
【发布时间】:2017-02-27 08:41:54
【问题描述】:

在 Linux 上运行的相同代码在 FreeBSD 上不运行

在 Linux 上

% set timeZone "-4:0"
-4:0
% set timeZone [format "%+03d%02d" {*}[scan $timeZone "%d:%d"]]
-0400
% puts $tcl_version
8.5

在 FreeBSD 上

% set timeZone "-4:0"
-4:0
% set timeZone [format "%+03d%02d" {*}[scan $timeZone "%d:%d"]]
extra characters after close-brace
% puts $tcl_version
8.4

如何在 FreeBSD 和 Linux 上进行这项工作?

【问题讨论】:

  • 看起来您安装的 FreeBSD 使用的 Tcl 版本不再受支持。你能更新一下吗?

标签: linux tcl freebsd


【解决方案1】:

您将不得不使用eval,因为列表扩展({*}was implemented in Tcl 8.5。你也许可以使用这样的东西:

set timeZone "-4:0"
set code "format \"%+03d%02d\" [scan $timeZone "%d:%d"]"
# This gives you "format "%+03d%02d" -4 0"
set timeZone [eval $code]

如果您不喜欢转义引号,可以使用大括号(IMO 更简洁一些):

set code "format {%+03d%02d} [scan $timeZone {%d:%d}]"

或者可以从 wiki 找到更详细的 8.4 解决方案here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2022-11-18
    相关资源
    最近更新 更多