全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑 4 U0 `$ n  E9 f$ _" E) [

$ |5 P3 a7 E% {3 Y7 G& N& Q3 a% m+ O2 J* ~& v. o
如图所示:2 p6 X! G5 J7 L
使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:( ]: s) l: _% n+ A
  1. /**显示处理器加工时间*/2 M" e& [( R; s& Z8 s) [/ t8 y
  2. treenode current = ownerobject(c);
    2 z5 \# d5 q$ K1 y
  3. treenode  textnode = param(1);
    ! ]& V6 Q7 V$ S( n2 {( P
  4. 3 w' U0 B- h" C
  5. string starttext = "Object Stat: ";7 D; a6 U: H( `* L$ ]
  6. treenode involved = node("Processor",model());
    / g6 {5 c: _: E8 q2 r
  7. string statstr = "";4 O3 ?+ F( r, U; }9 f9 W9 i8 J

  8. ! E+ }* Y5 d; I. s3 z. `
  9. if (content(involved)>0) //如果处理器上有临时实体
    ! g" W7 ]  \  H3 {
  10. {
    # ?0 v; q' X$ m4 n' E
  11.         treenode item = first(involved);
    4 {" H$ Q2 u" j/ O) I8 o% ?
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)
    , O" X9 \8 J4 X* i2 j. m
  13.         {//如果处理器处于加工状态3 Q9 n! x1 G3 a6 p0 n: p8 i9 a
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);/ p8 v7 o) x8 \7 G/ j
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console4 _$ {6 c" w+ }1 h& @( r8 b
  16.         }          ?2 b! ~9 |: Y3 f. |
  17. }
    ; I& ]8 [! ^; V  b( S
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console/ G9 R( O. e# g
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码

/ h. q4 }6 n* @4 F7 _, ^+ P8 C, h5 l$ \) }$ `0 @$ U3 x
理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。
3 |& }/ z: v! G+ y: A2 p但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。: D' m7 e" q4 t" ?- t8 ~

+ l& ^) \9 k# J/ ?; O# @+ q# z5 t9 p$ H& v* F3 Y* w, J

, n8 s& J1 q% K0 _7 G# t2 I

本帖子中包含更多资源

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

x
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题5 F! I1 N9 }: Y: o2 Z. M
在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑 - d0 K8 ~# O' z! u6 e4 c7 l9 [8 s

+ O3 [0 \, t- s忽然有些觉悟。
* S, c( b5 T. a将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。6 j6 D+ W7 Y$ _; r% S
在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-29 02:38 , Processed in 0.079359 second(s), 15 queries .

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

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