0

以下是一些 TCL 命令的结果。

get_props -type assert
{"a", "b", "c", "d"}

现在所有这 4 个对象都具有与其关联的某些属性。但我只对“启用”属性感兴趣。

get_attribute [get_props a] enabled
true

get_attribute [get_props b] enabled
false

get_attribute [get_props c] enabled
true

get_attribute [get_props d] enabled
false

现在我只想将这 4 个“断言”类型对象中的“启用”对象(启用 = true)转换为“覆盖”类型对象(因此只应转换“a”和“c”)并转换“断言”进入“cover”,命令为fvcover。

我尝试了以下命令:

fvcover [get_props -type assert]

现在的问题是,这个 fvcover 命令将所有 4 个“assert”类型对象转换为“cover”类型对象,而不仅仅是“a”和“c”。

所以我想,我需要结合 get_props 和 get_attributes 命令,但我不知道该怎么做。

那么如何解决这个问题呢?

注意:-“a”、“b”、“c”、“d”仅用于说明。实际上,get_props 命令可以返回任意数量的任意名称的结果。但是在该列表中,我只需要转换那些“启用”属性为真的对象。

4

1 回答 1

0

列表不是 Tcl 格式。这里有一些测试代码可以用来从你的格式转换为 Tcl。

#### PROCS FOR TESTING ####
proc get_props {type {assert no}} {
    if {$type == "-type" && $assert == "assert"} {
        return {"a", "b", "c", "d"}
    }
    if {$type == "a" || $type == "c"} {
        return [list enabled true]
    } elseif {$type == "b" || $type == "d"} {
        return [list enabled false]
    }
    return [list NOT FOUND]
}

proc get_attribute {a k} {
    foreach {key value} $a {
        if {$key == $k} {
            return $value
        }
    }
    return NOT_FOUND
}


# get props. props is in a list format that is not native tcl list
set props [get_props -type assert]

# convert props to tcl list
set props_list [string map {, ""} $props]

# make a list to catch enabled props
set enabled_props [list]

# add enabled props to new list
foreach {prop_name} $props_list {
    if {[get_attribute [get_props $prop_name] enabled] == "true"} {
        lappend enabled_props "\"$prop_name\""
    }
}
# convert enabled_props to your format
set enabled_props "{[join $enabled_props ", "]}"

# run your program on $enabled_props

puts $enabled_props
于 2015-12-08T22:27:26.687 回答