全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑
" o, `" O, ^6 x( n  {8 ^! @
2 g% z2 j4 l, r7 t8 ^) w) N+ X- h' b# F. `# `
如图所示:
. u3 p; \9 K) W* ?/ [2 j使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:) q0 p3 J6 v& w; V- o* l1 c
  1. /**显示处理器加工时间*/7 r7 X2 B1 h* e. k. U
  2. treenode current = ownerobject(c);
      ]: v5 w- p9 c/ M" B
  3. treenode  textnode = param(1);+ n* l0 T! U  r# k) q4 d7 a* Q

  4. 1 a+ g0 C6 M6 ?. y2 d. u. u
  5. string starttext = "Object Stat: ";
    4 d; ]: H9 i8 ^: N& N
  6. treenode involved = node("Processor",model());8 U1 B$ \+ P$ t- l% a9 [
  7. string statstr = "";
    & T9 Y! S  t, D8 E

  8. 3 _+ k% c) m7 a1 k# z$ g
  9. if (content(involved)>0) //如果处理器上有临时实体2 k; j' c$ ?+ X! L2 ~$ T( m
  10. {
    - m& d/ B7 c7 n" n. a
  11.         treenode item = first(involved);) H5 C$ f4 _; M5 W/ ~7 x# _* e
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)
    9 W& y7 \# J) z) D$ |
  13.         {//如果处理器处于加工状态
    4 H) H2 _5 `9 T+ E% L: J5 ?7 r
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);7 L9 u8 @8 U4 Y; D/ g
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console8 ~- G; x9 @% Z3 U  O1 E% Q5 {
  16.         }        
    ( n& ~! u$ g/ {9 ~
  17. }# N$ i: ^! b* d; F. M/ A! B+ _
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console! I( q. `$ ^8 K, T; J% m- j$ S) z
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码
, o( v" S1 P$ |0 Z- U& o
6 }- ~! m5 U* H: c. J) n
理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。
  S( K' J7 M2 w0 [$ x! Q) b但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。9 K* i. f8 N  g
) q/ _( y! I' x( e+ H3 h0 P
  w: a# F7 Q+ w6 {1 ?2 u8 D

9 A  g5 q. u% R& u. x& a/ F8 O* c) Z

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑 , B5 p, n) A. T( e7 c$ `
$ v) t5 n# v) o" x( O
忽然有些觉悟。& g1 S9 Z! m$ Z# x6 P
将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。
6 }( X# x: A2 L6 w  d. ]在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题( \7 J+ y& k3 G+ k( ]: C' `
在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-6 10:15 , Processed in 0.082387 second(s), 14 queries .

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

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