全球FlexSim系统仿真中文论坛

搜索
查看: 7545|回复: 2
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑   q& h8 |) J7 g9 w4 v* B
1 v* V8 |2 |8 ^

" ?& k( N: j' ?$ g如图所示:
  v6 @7 p; {$ O6 m! O0 I使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:3 t) F+ W4 g1 l* p2 S. B  Y& F
  1. /**显示处理器加工时间*/
    : I! L" t. b, v: w' z
  2. treenode current = ownerobject(c);5 G2 ]" U( s' M9 D9 h3 [# m9 m
  3. treenode  textnode = param(1);% o# x9 S& {* ?! X$ p- M) P, ^+ M
  4. " t2 a' Y+ K8 X" v, C# L  {
  5. string starttext = "Object Stat: ";
    1 D. R7 l/ d" b
  6. treenode involved = node("Processor",model());
    " E% N. r8 q2 a' L+ {6 j- `. T$ h
  7. string statstr = "";5 e- J* ~" T; t) ^3 G
  8. & J. h! o' ?/ j; m3 {' I$ L! G
  9. if (content(involved)>0) //如果处理器上有临时实体% C' ]* Y: Y) L+ i
  10. {
    % ~! @" C4 i8 `% @  E( c4 z! ~5 {
  11.         treenode item = first(involved);
    0 p0 q+ d+ L- A. e
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)/ j- o2 L, z* Q7 `
  13.         {//如果处理器处于加工状态
    8 S( o% a7 H! F0 O+ K% E/ m" l% _" y
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);
    1 j" F* F& E1 H4 I
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console. Z# v7 G0 n7 R8 j6 @+ [
  16.         }        
    8 R" X% x& c6 o/ ~( f- t
  17. }" ?% d" a- @! |/ S
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console9 l4 R' _1 U7 Y7 M
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码

+ Q& X: B0 G8 x; K
$ L/ s( J: L8 N3 d9 i/ \( f理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。" T; L2 G6 w8 q  G
但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。
! B: k8 _5 g' i9 K
7 W' u( `2 X) n6 v
2 v, a# c; v1 ]: L. e0 j  u; ?
* `4 n" f4 M0 }

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑 ) J" [9 D& \& Y. E

3 m; W! a+ o/ I/ G' [; q% Y; A忽然有些觉悟。
: X0 e2 `" J% }" j; B/ I& k将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。
1 m+ q/ c% O* w在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题: R" D) p1 B* x3 }0 X) W
在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|全球FlexSim系统仿真中文论坛 ( 京ICP备14043114号-2 )

GMT+8, 2025-9-6 06:06 , Processed in 0.059331 second(s), 14 queries .

Powered by Discuz! X3.3© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表