发帖
 找回密码
 立即注册
搜索
2 0 0

IF语句声明的变量仅在IF代码块内有效

技术交流2 2 2 2018-5-17 10:07:35
[i=s] 本帖最后由 zorsite 于 2018-5-18 13:17 编辑 [/i]


如图所示:
使用Text实体显示处理器加工时间时,想要同时[color=#ff0000]获取临时实体的类型值[/color]。以下是Text Display代码:
[code]/**显示处理器加工时间*/
treenode current = ownerobject(c);
treenode  textnode = param(1);

string starttext = "Object Stat: ";
treenode involved = node("Processor",model());
string statstr = "";

if (content(involved)>0) //如果处理器上有临时实体
{
        treenode item = first(involved);
        if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)
        {//如果处理器处于加工状态
                statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);
                pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
        }        
}
pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
setnodestr(textnode, concat(starttext, statstr));[/code]

理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部[color=#ff0000]获取item type[/color],都应该是一样的结果。
但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。



──── 0人觉得很赞 ────

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
2018-5-17 10:16:54
[i=s] 本帖最后由 zorsite 于 2018-5-18 13:29 编辑 [/i]

忽然有些觉悟。
将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。
在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
2018-5-20 09:27:41
声明变量作用域的问题
在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 立即登录
高级模式
返回
技术交流2
热门问答
查看更多
1
Flexsim初级建模工程师水平标准
Flexsim初级建模工程师水平标准
56
234
2
厂区生产线布局优化案例!新做的!
厂区生产线布局优化案例!新做的!
38
224
3
流水作业线的仿真
流水作业线的仿真
35
83
4
无意中找到的资料,非常适合于初学者
无意中找到的资料,非常适合于初学者
29
229
5
flexsim中文教程,pdf文档已整理-重新整理
flexsim中文教程,pdf文档已整理-重新整理
28
114
博主榜
+ 5