全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑 5 _9 `$ L& W. W& `% l! }+ c

* {8 }! Y2 z8 h; D, e1 z* a
$ |$ M& k( C% M如图所示:% M2 [: ~; ]6 G. s9 I
使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:# Y2 |" Z! Q1 }) U' f: j1 h
  1. /**显示处理器加工时间*/
    ! v0 s6 }& D/ S; }. p- M
  2. treenode current = ownerobject(c);# ?9 j7 y$ x4 r* `
  3. treenode  textnode = param(1);& {) |9 `2 o# t- ^3 I9 |, v. }

  4. " j/ y3 r6 S- X5 e9 |4 t
  5. string starttext = "Object Stat: ";* Q. d9 B% Z  T* F( P
  6. treenode involved = node("Processor",model());: m% L% J7 K4 j4 K  q
  7. string statstr = "";
    5 T' g0 ?/ w/ ?3 G" `5 a, G

  8. . W# w! c& j, k7 X0 ^& Z
  9. if (content(involved)>0) //如果处理器上有临时实体  \, Y! b/ ~3 y! l3 l  [1 A
  10. {8 v3 V0 Y+ I- T! V
  11.         treenode item = first(involved);
    ) X* Z, \7 }8 g
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)
    ' H. K. t7 r6 M0 `' |( M0 P
  13.         {//如果处理器处于加工状态. A/ i" C/ P: }0 P; P$ h
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);
    ; a- @/ X: v) i1 l8 D0 `8 O
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console! }9 A; y3 |) ~
  16.         }        - c$ c, |% `, u; m6 y8 H5 u4 {
  17. }' d" B& Y# @3 G1 o. J3 L
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console1 O  g4 O' E: e2 m3 n, l
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码
- j( m- r) e4 ?* k  @" K) {

% B) H5 C" Y& v: z3 X- B" H1 N理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。
0 E0 \# Y2 h+ ^但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。$ p0 I# ]5 Q, I% C6 O
* B# O/ N2 @9 V
& U# j' \  j% m- c; s4 z
# @: w4 K% v. Y1 i

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑 * y3 g; [9 |' S" R8 s
  }* d2 j! K% k& Y9 P
忽然有些觉悟。6 k. r* c! w; Q4 j
将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。# F2 p( t! W/ E& F# e; t9 l+ Q0 x
在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题
& M# b7 i3 o7 P0 a1 k5 o5 }在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-20 13:30 , Processed in 0.077479 second(s), 14 queries .

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

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