将一个函数输出传递给tcl中的其他函数

时间:2017-02-10 14:13:08

标签: tcl

我必须只创建一个名为$ Project的变量。需要在此项目下创建仪器的多个端口。没有任何函数调用代码如下所示:

 set Project(1) [stc::create "Project" \
    -SelectedTechnologyProfiles {eoam ospfv2 isis dhcp} \
    -ConfigurationFileName {new.tcl} \
    -Active "TRUE" \
    -LocalActive "TRUE" \
    -Name {Project 1} ]

    # create ports
    set Port(1) [stc::create port -under $Project(1) -location //$ipaddress/1/1 ]

    set Port(2) [stc::create port -under $Project(1) -location //$ipaddress/1/2 ]

现在,如果我创建一个名为" create_project"另一个名为" create_ports" (可能会多次调用,具体取决于端口数),那么我的问题是如何将$ Project传递给create_ports?应该create_project返回$ Project,我必须再次传递$ Project到create_ports?或者,有一些更简单的方法来实现这一目标?

请建议。

2 个答案:

答案 0 :(得分:0)

您可以轻松地链接命令调用; [ ... ]语法完全是通用的。

set port [stc::create port -under [stc::create Project ...] ...]

这样做是否一个好主意完全取决于你的程序在做什么。 (这些规则适用于与任何其他命令相同的过程;过程只是使用与本地堆栈帧一起运行的脚本实现的命令。)

答案 1 :(得分:0)

您可能需要以下内容:

proc create_project {name number} {
    return [stc::create "Project" \
        -SelectedTechnologyProfiles {eoam ospfv2 isis dhcp} \
        -ConfigurationFileName new.tcl \
        -Active TRUE \
        -LocalActive TRUE \
        -Name "$name $number" \
    ]
}

proc create_port {project number} {
    global ipaddress
    return [stc::create port -under $project -location //$ipaddress/1/$number ]
}

set pname "Project"
set pnum 1
set proj($pname,$pnum) [create_project $pname $pnum]
# create ports
for {set i 1} {$i <= 5} {incr i} {
    set port($i) [create_port $proj($pname,$pnum) $i]
}