全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑 $ k) p8 t, G5 p+ s; X4 `/ \6 [8 G

% ~( ^$ k: m0 G9 ~
0 j: u5 @* }/ \7 s如图所示:0 k+ ]. \# i+ ]1 C
使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:
- W! b+ R1 p: P' Z
  1. /**显示处理器加工时间*/
    6 Y4 q) x/ H1 T' G% H
  2. treenode current = ownerobject(c);
    4 L% W) q! R2 A
  3. treenode  textnode = param(1);. C, H0 U/ @+ s

  4. / d7 K  q: [$ W  y, k5 [/ B
  5. string starttext = "Object Stat: ";/ n5 h& k! _5 v  W! O
  6. treenode involved = node("Processor",model());3 p' p% s( a) A0 _! u
  7. string statstr = "";: C9 g# H1 t' \$ I5 i5 b6 m, P
  8. 2 F, p9 K0 {+ g. d: E7 d* I4 e: R
  9. if (content(involved)>0) //如果处理器上有临时实体. `/ y0 o' M/ I) l! G
  10. {  B0 s0 o* T" o7 x; T; o
  11.         treenode item = first(involved);7 ^' m3 \, X3 _# N+ k# U
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)
    % B; {7 L, ]4 i/ p
  13.         {//如果处理器处于加工状态
    . P" e$ l0 W* I8 Y
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);' A( r* D: n( W2 Z! H
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    ; d! M* d$ C1 k$ ~
  16.         }        
    ' Q: W3 u' s/ K; m. i4 o3 [; R
  17. }
    ' v, m! P9 U& |- g# ]. m
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console: z3 A" D: J! U" m
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码
* T# j# j0 e& Q. i+ \
! p' s1 A/ {  Z
理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。; @; B% z# q7 c
但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。
' P7 N/ D* _* p! n6 \0 b/ Z- u( G5 w* x- _2 H5 E# W- e" _
8 a! k  H' o$ W2 L
: ]; N0 A  D3 ^9 V. n$ Z7 r, z

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑 8 M1 M/ r3 n5 Q9 ~3 [

8 N2 q) V' Z2 W4 X忽然有些觉悟。
% w/ z# U% [( D' I将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。
- X8 _- D4 {, s& M: `5 o3 c在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题
% u. m+ }- p$ y8 O在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-15 13:04 , Processed in 0.065552 second(s), 14 queries .

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

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