全球FlexSim系统仿真中文论坛

标题: IF语句声明的变量仅在IF代码块内有效 [打印本页]

作者: zorsite    时间: 2018-5-17 10:07
标题: IF语句声明的变量仅在IF代码块内有效
本帖最后由 zorsite 于 2018-5-18 13:17 编辑
# C% S/ \& z9 ^4 U
3 f) _( z1 {% c[attach]4398[/attach]* U6 F( E$ c  f. G' u/ L) `
如图所示:- L1 j* c4 J+ ?' z/ W6 i- R$ B& k
使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:
' i$ w% }( I& s) r& w4 _
  1. /**显示处理器加工时间*/
    4 Y1 ?& \' v* i( a7 K; E
  2. treenode current = ownerobject(c);
    3 Z" `6 O( e$ z5 V2 [# G9 U- x
  3. treenode  textnode = param(1);
    & q' ]& j  k0 F

  4. ' u  u& v* Q6 p7 G6 z
  5. string starttext = "Object Stat: ";
    - f* B7 T# z$ X4 Q4 m# e4 H
  6. treenode involved = node("Processor",model());. Z1 I4 n  T9 ^! l9 M# U( Y+ m
  7. string statstr = "";6 {2 e: I! t1 }% A% E' F( ^7 o9 \

  8. 1 h. o/ E3 Y+ u- K' b
  9. if (content(involved)>0) //如果处理器上有临时实体: {- T; B0 Y0 z) F7 p0 b
  10. {. G4 K1 r1 x/ ?, L' k- c0 m
  11.         treenode item = first(involved);
    ; V+ h# @9 N5 q3 z9 E" i
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)
    * j" p3 D: n) n- O+ b
  13.         {//如果处理器处于加工状态
    * W5 v' w8 E/ T- M6 V
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);  o. b4 u+ b) C
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console. w$ T4 i  _8 u' P; Q
  16.         }        ' d' {2 q; s$ b3 P( \7 S
  17. }4 J. @/ _6 B- @
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console6 H; O6 r4 r8 L) `1 ]
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码

+ q) K; t3 u; j8 b& E) j4 @! f/ x
" A* h4 P3 ]) t& Y4 K1 Q理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。/ G8 r) X$ e7 L# b* x
但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。
3 S$ s, Q! E( l& Z[attach]4399[/attach]
5 F- J! G: n' N  n+ ~* e
/ X7 a& x+ f8 [9 R) m4 T7 o
7 T2 [" h- P9 |6 k  \
作者: zorsite    时间: 2018-5-17 10:16
本帖最后由 zorsite 于 2018-5-18 13:29 编辑
: N6 s/ r, ~8 j; [* Y: e$ U. h3 l; t/ z' w& D! R
忽然有些觉悟。$ x& f0 L0 q. g% R; f& C" [* a
将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。* R, \, M$ p  ?0 t' O/ M. H
在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
作者: 慧娴亚伦    时间: 2018-5-20 09:27
声明变量作用域的问题
/ q8 f. z* A/ \3 P# o$ \! b4 g0 L在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。




欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/) Powered by Discuz! X3.3