全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑 . L3 A0 i. z0 Z' d# c# D8 Y  y$ s; W

" [5 Y/ r; D, R0 Q+ Z( p
# g' R+ p, s" G1 e+ f5 r如图所示:
& t% T3 n1 G( L5 P9 z使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:0 d2 f- o1 \0 Z
  1. /**显示处理器加工时间*/8 Z2 P: {  y6 m9 O3 H
  2. treenode current = ownerobject(c);
    + z* V& O) X5 w5 x8 g
  3. treenode  textnode = param(1);3 z. P6 W, _$ |. F

  4. + J; i) \6 f3 l+ d
  5. string starttext = "Object Stat: ";
    , _2 ~3 S+ w$ f& k" X3 b) I% p
  6. treenode involved = node("Processor",model());
    * t: \9 g) F  N3 P/ n+ _8 I! e$ ^; Q
  7. string statstr = "";
    - }3 Q8 V, }/ Z4 x7 ]
  8. ' o! I, R# c, h0 G8 f9 _
  9. if (content(involved)>0) //如果处理器上有临时实体9 ]) R  t: P- w- m. M  [, u6 K
  10. {
    . {  `. I3 ?4 B7 i2 s# f# R& f  F
  11.         treenode item = first(involved);& K0 p6 |+ I- ]) c' I
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)( `& k! Q8 ~! I3 s$ G9 P
  13.         {//如果处理器处于加工状态
    3 h* H- @( p4 H4 R# l) z
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);
    " b, h& R7 q, ]3 [
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console& v7 K4 E9 s2 q) o( Y7 \' v3 {
  16.         }        
    8 B! G$ H/ g/ G$ O3 D( U
  17. }
    6 L7 i6 G) N) X+ }
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    ; _  I1 a! w; M/ x3 _8 M
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码
! T5 ~* o3 K1 K
$ i3 H" h9 h; X6 Y
理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。) d0 O( `! V. w# g* n
但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。
0 ?- d! e' u0 @1 f1 e/ a! k
. Q% W1 ^- R' I' F: o
( H* A% L: B* k# `. z% t5 ?7 ?( H8 H* ~

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑 $ Q9 k( l0 {6 O. e8 {9 j* M

% b2 u  y6 y. P: m7 u, `; Y, G忽然有些觉悟。
2 _5 J+ j% s2 E' \' P' t4 u5 a$ e将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。9 ?, j9 }+ r9 A5 D: \# ~8 o
在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题( o1 j$ m; E/ V/ U, w/ n( F: |+ r
在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-6 08:12 , Processed in 0.061117 second(s), 14 queries .

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

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