全球FlexSim系统仿真中文论坛

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

作者: zorsite    时间: 2018-5-17 10:07
标题: IF语句声明的变量仅在IF代码块内有效
本帖最后由 zorsite 于 2018-5-18 13:17 编辑 1 Y" j! L! b0 A: y4 j* |

$ C( B- G' P- J2 k7 W[attach]4398[/attach]
* ^" d- g2 m/ P, H# T+ J+ G  `; o) Y如图所示:5 {# I0 o; o3 {* R/ \3 K
使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:
1 A/ d6 ~. u8 x1 y. U8 U  m
  1. /**显示处理器加工时间*/
    8 u9 h4 s" g; Q# \5 M: z
  2. treenode current = ownerobject(c);
    " s5 u# a; W2 ^! _7 C+ N
  3. treenode  textnode = param(1);
    8 C6 ^* K2 y  C8 S1 D' b
  4. $ X! n$ T4 G5 n% P! z% X
  5. string starttext = "Object Stat: ";! \- d# b/ B+ O/ t# F
  6. treenode involved = node("Processor",model());. e/ c- Q4 b9 X  S6 G
  7. string statstr = "";
    9 H- [. X& e8 O( [$ p

  8. # I$ ?# m( T/ l# j4 f
  9. if (content(involved)>0) //如果处理器上有临时实体" a0 l: E5 i4 B# B" Y) @- N( n
  10. {7 L' g! O1 T) @9 I0 L- H
  11.         treenode item = first(involved);
    ! D0 z$ j: I- y$ D) F* d
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)
    ! W  _; [( q7 ~( S. |: S  i
  13.         {//如果处理器处于加工状态
    ' q6 G" ^$ o* C9 N: `4 A& r
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);$ S, e/ E; q1 d
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console  ?/ k& c& q: o) e4 T# ?$ [1 }
  16.         }        
    , N4 g/ d/ t5 y4 ]! y7 J; ^2 k. k! @
  17. }. A) S' f1 z1 P# F, s! S
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    5 h1 t; `6 m% F: A
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码

. t5 h( O  I7 _) D5 }2 Y& `1 Y, g8 l9 A; a3 `5 t
理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。
4 \) H$ g" V6 Y( t$ \' n但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。7 R+ R$ y  [- P( ^$ h( m
[attach]4399[/attach]; x' Q, B( O/ F

  g6 |9 n. a! {* C4 B  I& J$ N
9 i5 B- G' }( n1 h$ I  y  U
作者: zorsite    时间: 2018-5-17 10:16
本帖最后由 zorsite 于 2018-5-18 13:29 编辑 : g0 s: v& b& K

. N5 A' Q( T  K8 W. {忽然有些觉悟。( ]. E' u- G$ X2 k) N( e0 Z
将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。
  k5 G& `/ j* I: U. G3 k- ~在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
作者: 慧娴亚伦    时间: 2018-5-20 09:27
声明变量作用域的问题
# {  k8 }+ x6 e6 q% i在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。




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