1

我正在尝试展平以下类型的 Tcl 列表:

-1587.500000 {} 1587.500000 

或者

15.78 18.56 {} {} {} {} 15.6

所以我尝试:

 [struct::list flatten -full $lineToFlatten]

但是当lineToFlatten以负数开头时,会发出以下类型的错误消息(例如):

  Unknown option "-1587.500000 {} 1587.500000", should be either -full, or --

如何解决这个问题?

4

2 回答 2

4

通常,正确的方法是使用--来表示选项的结束。但是有一个错误会阻止您这样做(缺少lrange)。

正确的做法是:

struct::list flatten -full -- {-1587.500000 {} 1587.500000}

但这不起作用,因为struct有一个错误。

如果你想修复它,打开包文件struct::list,你可以得到文件名

package ifneeded struct::list [package require struct::list]

然后编辑 proc ::struct::list::Lflatten
换行

--      {break}

--      {set args [::lrange $args 1 end];break}

无论如何,我建议填写错误记录。

于 2013-05-06T18:41:12.043 回答
3

我刚刚发现了如何使用这个功能^^

好的,我不能说它为什么会这样,但它会给我一个错误,比如:

[struct::list flatten -full $lineToFlatten]

[struct::list flatten -full {-1587.500000 {} 1587.500000}]

似乎它将负号解释为开关/标志而不是列表的元素。但是,如果我这样做,它会起作用:

[struct::list flatten -full {{-1587.500000} {} 1587.500000}]

[struct::list flatten -full [list $lineToFlatten]]

第一个不是很实用,因为您将有一个很长的命令,并且您必须手动为第一个负数放置大括号。我在进行一些测试时发现了第二种解决方法。

我希望它有帮助:)

于 2013-05-06T16:56:18.963 回答