如何在tcl表达式中使用全局字符串值
我正在使用Ns2和tcl脚本。在下面的代码中,我想使用全局变量rate12,它在表达式中的值为2Mb如何在tcl表达式中使用全局字符串值,tcl,Tcl,我正在使用Ns2和tcl脚本。在下面的代码中,我想使用全局变量rate12,它在表达式中的值为2Mb if { $queuesize>16 } { set RL [expr $Rc * $fdec * $hf] set rate12 [expr $rate12 * $RL] puts $rate12 } 从进程记录中找到。但它会显示以下错误: ns: record _o104 file5: invalid bareword "Mb" in expressio
if { $queuesize>16 } {
set RL [expr $Rc * $fdec * $hf]
set rate12 [expr $rate12 * $RL]
puts $rate12
}
从进程记录中找到。但它会显示以下错误:
ns: record _o104 file5: invalid bareword "Mb"
in expression "4_@_Mb * 0.40000000000000002";
should be "$Mb" or "{Mb}" or "Mb(...)" or ...
(parsing expression "4Mb * 0.40000000000000...")
invoked from within
"expr $rate12 * $RL"
(procedure "record" line 26)
invoked from within
"record _o104 file5"
Tcl的
expr
命令不适用于附加了Mb等单位的值
因此它试图解释值$rate12
,它是4Mb,但这不是一个有效的数字文字,因此您会得到错误。再加上你不支持你的表达,例如你写:
set rate12 [expr $rate12 * $RL]
而不是
set rate12 [expr {$rate12 * $RL}]
您会得到expr的双重评估,这会产生误导性的错误消息(并且可能会慢得多)
要解决这个问题,您需要对不带单位的值进行计算,或者编写一个小程序来处理包含单位的值。Tcl的
expr
命令不适用于附加了单位Mb的值
因此它试图解释值$rate12
,它是4Mb,但这不是一个有效的数字文字,因此您会得到错误。再加上你不支持你的表达,例如你写:
set rate12 [expr $rate12 * $RL]
而不是
set rate12 [expr {$rate12 * $RL}]
您会得到expr的双重评估,这会产生误导性的错误消息(并且可能会慢得多)
要解决这个问题,您需要对不带单位的值进行计算,或者编写一个小程序来使用包含的单位进行计算。关键字
global
仅在proc
的范围内有意义。要访问rate12
,请在过程记录的开头添加以下行:
global rate12
这会解决你的问题
使现代化
我的坏,在PROC的中间没有看到<代码> Global < /Cult>命令。问题是,一开始您就有:
set rate12 4Mb
随后,在过程记录中
:
set rate12 [expr $rate12 * $RL]
根据Tcl的说法,4Mb
不是一个数字。我建议进行以下修复:
set rate12 4
或者,更具描述性:
set rateInMb12 4
关键字global
仅在proc
的范围内有意义。要访问rate12
,请在过程记录的开头添加以下行:
global rate12
这会解决你的问题
使现代化
我的坏,在PROC的中间没有看到<代码> Global < /Cult>命令。问题是,一开始您就有:
set rate12 4Mb
随后,在过程记录中
:
set rate12 [expr $rate12 * $RL]
根据Tcl的说法,4Mb
不是一个数字。我建议进行以下修复:
set rate12 4
或者,更具描述性:
set rateInMb12 4
他有一个,大约在一半的时候。假设你在示例代码顶部看到的是一个错误的补丁应用于原始代码。他有一个,大约在一半的时候。假设你在示例代码顶部看到的是一个错误的补丁应用于原始代码