全球FlexSim系统仿真中文论坛

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

作者: zorsite    时间: 2018-5-17 10:07
标题: IF语句声明的变量仅在IF代码块内有效
本帖最后由 zorsite 于 2018-5-18 13:17 编辑 . J  B" Q3 D0 y

' J' G5 I; S6 v7 x% s[attach]4398[/attach]% j/ z: x- J4 ?6 l% f+ _- Z
如图所示:: L$ O5 d0 o5 m4 ~$ h2 p
使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:
: U) H: Y0 u% H, z! @0 S0 z
  1. /**显示处理器加工时间*/5 p3 \2 {, \+ L$ i
  2. treenode current = ownerobject(c);
    : K6 T! t, c3 Z8 c
  3. treenode  textnode = param(1);
    0 W7 d1 \  W! u; F

  4. ! p6 j  F! w0 b
  5. string starttext = "Object Stat: ";# }+ E$ U& e7 h$ c/ e+ P/ R! ~
  6. treenode involved = node("Processor",model());
    ) j4 r; R. k8 c2 @: T4 M
  7. string statstr = "";3 e( g" y7 a3 }' \

  8. 9 R* X% q1 Y, _
  9. if (content(involved)>0) //如果处理器上有临时实体
    3 o& S; W, n5 V' ]# k+ j( @
  10. {
    8 \8 S4 o9 l' j( m, c9 V
  11.         treenode item = first(involved);
    $ P% ]! ?1 Z- y2 `
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)
    ' Q, V  s4 ]; G0 `' M9 i
  13.         {//如果处理器处于加工状态) V  q, B9 m5 {6 n* y
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);
    ) h0 C5 R: g' s) y
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    0 o7 K" O( D. l* p5 L
  16.         }        
    ( n& v8 Q* D+ I# R
  17. }& G) ^! I$ Q1 j7 A9 ~: _. ?0 a
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console- H& C% ^& P! t, E( h& S4 n. Z
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码
. t/ m4 b7 S( r( J7 S2 L

; `( W7 v! J% x) I8 q8 j( k理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。! {2 Q- R1 r7 ~% G
但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。
; _1 {( V; v4 h[attach]4399[/attach]
# N; c3 `& D, Q2 ^! l( L7 q% w, n8 U9 W6 e* q/ k2 g8 r

6 Z* S  Z$ ?: o# m" |
作者: zorsite    时间: 2018-5-17 10:16
本帖最后由 zorsite 于 2018-5-18 13:29 编辑
6 W( E$ i; L3 q) ?# o* ~3 N1 ?
7 {- h* d  N. Q3 @忽然有些觉悟。0 I: ~7 j) A: J$ r0 D' ^# h
将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。2 S4 ~9 U( u, E- S4 |) D( O, l
在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
作者: 慧娴亚伦    时间: 2018-5-20 09:27
声明变量作用域的问题
, \; N6 a: U; e* w' b4 ?在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。




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