全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑
! r9 _8 Y  ^* E
4 ~! J2 P/ F& K* o2 A- [2 |
- ^6 N1 r$ q0 g( c" ?如图所示:
8 b0 Z! F! ^; w1 }使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:2 ?! c! e! [+ K- ^$ Y/ s5 m( P5 O$ m
  1. /**显示处理器加工时间*/
    0 _/ `/ t0 U+ H! y* I5 r, t' A5 Q
  2. treenode current = ownerobject(c);, }& @1 r/ j6 `2 {3 d
  3. treenode  textnode = param(1);
    2 e' t- w* l" B. M
  4. % p2 b/ d  N9 V* l1 z  d% M) x) g  B
  5. string starttext = "Object Stat: ";* t- v5 W& {: }# B6 |
  6. treenode involved = node("Processor",model());
    1 @$ {, F) B9 l* p
  7. string statstr = "";0 J1 w3 i4 s1 a+ e5 O9 w3 N
  8. . [: W4 d+ I& c+ K  O
  9. if (content(involved)>0) //如果处理器上有临时实体
      M' K1 I: j+ I. n$ O  I6 E
  10. {
    1 J' V, s! z7 k4 Z! a
  11.         treenode item = first(involved);9 ]2 s/ v; N0 \: @
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)
    ) g- c( K3 d0 m2 U' L* x
  13.         {//如果处理器处于加工状态
      h5 V# V2 b& T' y( S, I6 I
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);
    + P  H4 u; Y' r4 G
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    - u& S2 D4 p- o5 E/ F0 O( e+ R( h3 |
  16.         }        
    : l7 P, z$ m! J8 U
  17. }
    % X+ z/ S+ S1 F2 I( T- B7 C
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    9 |! i3 |! w) C  P; m
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码
+ S" M0 K  q1 M: O% f4 ]2 }
: h* ]5 N" O9 {& X) s* K; s7 a% }
理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。, @+ q9 l$ L. n, x! d3 r
但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。
4 P7 Z5 d1 b" n* w1 Y# Y$ J6 _' }2 L
, A/ a' B3 T+ K( S8 D7 Q

' Z$ p3 f7 `& t4 G

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑
- }% {1 k0 s9 ]  ], ?4 d$ K8 Z$ N7 ^% e+ H
忽然有些觉悟。* P6 I6 [; j9 O& f9 S# w: a
将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。
( E( [! o( T. h/ t. Y6 t2 b在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题# K. [: y2 k1 v* [* n
在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-25 04:51 , Processed in 0.071483 second(s), 14 queries .

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

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