全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑
' d- i& K5 q: x( S/ V3 ]1 ]
8 P& K8 T, R3 z: {7 D, Z% D; D- t! ]+ R5 i& R& Q
如图所示:$ H/ q. X9 W. n, G9 }
使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:
4 t5 a. D" g, k  d
  1. /**显示处理器加工时间*// P5 Z8 y, Z- j- I9 z& ?/ h: |. t
  2. treenode current = ownerobject(c);
    2 N; ]& F1 O4 z0 m- C+ t( c: O
  3. treenode  textnode = param(1);
    / w1 F; [3 k# T  [5 F

  4. 2 [% {7 b* ]0 X
  5. string starttext = "Object Stat: ";
    0 g8 C: a6 p2 ?1 A1 \
  6. treenode involved = node("Processor",model());
    ' N8 `3 h$ Z8 C) k( ?
  7. string statstr = "";$ `) h1 r8 f; N+ l
  8. . X) Y5 Y9 p4 |7 {3 Z
  9. if (content(involved)>0) //如果处理器上有临时实体
    6 I5 b% J7 z% R+ W+ a/ f4 a
  10. {
    5 e7 g2 J" |% w7 `
  11.         treenode item = first(involved);
    0 p* Z5 {) w/ a2 P9 I. Y4 T  ?
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)
    5 @# f$ L7 [; m2 m
  13.         {//如果处理器处于加工状态* W9 Y2 b) R/ |+ E7 \; f# p
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);
    ( P7 C0 b% ^8 F1 o4 o
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console; p: {8 S  S: \2 l/ N7 u8 ~( w
  16.         }        
    & M. |% O( i% j. f
  17. }
    1 d" V7 u6 k' L% ~+ [
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    6 r  g+ v7 U3 T0 W9 \, F
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码
' o: W* y& T0 a

% l7 ^& b' y* u理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。' m0 e( }4 Q0 x' z1 b5 U& }( G7 l3 Q
但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。+ P! d' C) `  q* p" t6 |! ?

! c4 R- `4 }' N" r
- R8 ~/ k9 E) p% e6 ~6 I5 s/ g  E: B

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑
! W3 z6 W/ z/ B+ g' ?$ c! l' M' [# x% W0 Y
忽然有些觉悟。
7 w$ s6 L- U7 q# i0 T7 E& k# M将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。- N# l) S+ R. C( T: O8 Z5 p
在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题0 d" Z. b+ ]3 O  ^. y( G2 K$ ]4 H4 M: G
在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-12 13:59 , Processed in 0.079715 second(s), 15 queries .

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

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