展平负数列表

时间:2013-05-06 16:06:13

标签: list null tcl flatten

我试图压扁以下类型的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 --

如何解决这个问题?

2 个答案:

答案 0 :(得分: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}

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

答案 1 :(得分: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]]

第一个非常实用,因为你有一个很长的命令,你必须手动为第一个负数放置括号。我在测试时找到了第二种解决方法。

我希望它有所帮助:)