全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑
& b! X7 I5 T9 O: s! h/ a& U( X) R7 a# s$ S; ~+ s

9 U. x4 `3 M: D" X3 E3 M如图所示:4 @; X" \( s) L
使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:
$ X7 g8 d4 w- s5 N: V
  1. /**显示处理器加工时间*/8 N7 c: K% N$ b1 c
  2. treenode current = ownerobject(c);
    2 X6 U5 I% x* {3 k
  3. treenode  textnode = param(1);7 s" t; o) U  [& |

  4. . ]% l# X0 a; `1 ]
  5. string starttext = "Object Stat: ";
    ( J( G& b# R" T! ~
  6. treenode involved = node("Processor",model());
    ! X& r" x, ?* W0 b
  7. string statstr = "";# F: l! w( O3 G4 ~7 a* m: t

  8. 3 J1 z. B1 f" h2 N6 \% }, @8 N
  9. if (content(involved)>0) //如果处理器上有临时实体
    ; u9 n2 ~; s/ Q& m; n; `" M
  10. {/ @/ c9 j/ u7 k( S4 {+ t% o. W$ L* C
  11.         treenode item = first(involved);" U+ F$ @, l& F
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE), x( K/ T0 _8 R2 }, Q' d, M
  13.         {//如果处理器处于加工状态. i1 d4 {8 Y8 d% N) f
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);
    ' P/ q, i" k. |. z* Q" M
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    5 A* N$ H+ I# ~! m
  16.         }        8 R5 H  [( |8 h' v+ }
  17. }
    & ?9 F% ^) G& B5 `" c0 F; x0 S
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console$ U* L/ f& |: L: H8 V6 V, q$ w' }
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码
9 {  q& g3 S4 z* ~1 m. x6 D
+ W1 x8 d# K/ J9 _' D( k
理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。/ c' J; l) k( w" z
但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。/ X" {7 A! W: {& t! ^$ A# p

) F1 M+ r9 n; @# {; b
* K6 m" `4 |5 d" H1 t* y8 H1 {
) T+ C9 W8 C! f  y0 U1 ^+ v6 C

本帖子中包含更多资源

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

x
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题$ x7 M: o' e4 `9 o7 R3 Q
在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑
! `! Y6 k# M1 C$ g5 W5 X6 G
1 P  e1 E1 F" q! s- m/ A/ T2 p1 L忽然有些觉悟。
) L. v. p2 C! v' T0 b9 {6 s将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。
8 u$ J2 ?  D+ D9 X3 A& ]% Y2 J6 N在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-3 21:04 , Processed in 0.071789 second(s), 15 queries .

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

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