我试图压扁以下类型的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 --
如何解决这个问题?
答案 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]]
第一个非常实用,因为你有一个很长的命令,你必须手动为第一个负数放置括号。我在测试时找到了第二种解决方法。
我希望它有所帮助:)