全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑 3 M6 U* Q* B  e- V% o

7 V6 Z0 R. A  Q
, h" p" A& M# a- j2 ]4 V. x  h如图所示:2 n5 _/ S# V& g# q4 w$ a# j! F
使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:3 K9 p' U+ {( t
  1. /**显示处理器加工时间*/
    ) B. l/ Q- F0 Y; ^
  2. treenode current = ownerobject(c);
    6 ?4 a0 q; P7 d" n
  3. treenode  textnode = param(1);8 D/ f3 H: @! n. O

  4. 2 R( a5 D/ k3 v0 u
  5. string starttext = "Object Stat: ";3 L* b- ~: _3 V, {4 Q& J' |
  6. treenode involved = node("Processor",model());
    ; k8 `0 k( N7 |4 K+ o4 d0 M
  7. string statstr = "";' \1 d; R4 }5 C7 \% @7 j
  8. , g+ \  z# J9 n4 X5 j
  9. if (content(involved)>0) //如果处理器上有临时实体
    9 ]) P  c5 y# N/ ~2 {8 f! g- m
  10. {& w  V% ~  J; I: y4 d
  11.         treenode item = first(involved);
    * Q" g9 u8 X$ v8 L
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)3 I, A' x, [2 t
  13.         {//如果处理器处于加工状态
    + B2 h# }$ v% M/ ^; T% k
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);
    6 n9 r1 o; ?( y) {
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    7 a6 K7 w6 c. k6 Z& X
  16.         }        
    9 Y5 B8 w0 H' ?* [/ X2 V6 b
  17. }
    4 \1 h+ S) U7 u# L
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    ; R% F, O4 q( u+ @
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码

0 e$ U- O. x+ V9 F0 K( f$ p' z1 I+ z: h8 _/ L
理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。' `/ P$ h2 {; N  m0 a/ ?
但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。$ ?; D6 Y# v5 t2 v
& Q' i. G, n& d, x7 J9 j
0 p; }+ z, w& d. L# b: d3 b* |
% }: ?9 ^4 ^8 H6 Y+ j0 {+ M

本帖子中包含更多资源

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

x
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题
, g4 i( [2 q( P. R9 a在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑 ) Q" H+ b1 F- Y* p& e

8 I  a' U/ o  n8 J) B  v! C3 ?, i忽然有些觉悟。
/ K" j8 x) P3 n0 ]" _将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。4 H# z; y* E' Y) X1 t4 S8 b
在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-6 06:11 , Processed in 0.060228 second(s), 15 queries .

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

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