全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑 % [) H; F$ P! T; c8 k2 U( h' h
/ G) R+ D8 C7 D3 R$ w

5 p% s& ]% i! T0 n如图所示:3 A  n* U' v  N/ u) h: u4 H  E, z
使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:) a5 J! O9 F0 W+ Y
  1. /**显示处理器加工时间*/7 Q& W: A0 V/ m+ }+ g! F4 R: S! Y
  2. treenode current = ownerobject(c);
    + B0 ~: e2 S& `8 Z- o7 l7 J1 ]. f
  3. treenode  textnode = param(1);$ X, w9 a& {0 T+ ~

  4. 1 g& O& B/ o3 V) N2 ~7 P. Q" K+ k
  5. string starttext = "Object Stat: ";9 I/ {* e9 o( N& }2 T
  6. treenode involved = node("Processor",model());" }" h8 g8 B, V9 \, i) O6 K2 V& D) @7 o
  7. string statstr = "";, _( n* ?2 x& W  {1 A
  8. / _' v+ R; u$ p4 ^0 j9 W* x9 U
  9. if (content(involved)>0) //如果处理器上有临时实体3 f2 v! m3 Y4 l3 I
  10. {! x8 C" d+ _8 v: [0 w9 Y7 \
  11.         treenode item = first(involved);
    7 d8 A- s9 U8 }
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)2 p6 C% a$ E- R7 ^' u- V9 r, z" w
  13.         {//如果处理器处于加工状态
    9 u7 R- P- |* ]
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);
    7 D& }  O  z2 n; a+ n; J# }3 ]$ D  o
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console- W: G* q4 o) W: M. j$ ~* b+ Y
  16.         }        
    3 f+ {& i0 M* b( v* S2 m4 t/ M" c
  17. }
    9 L* N/ w4 z2 |5 x- Q- V4 G
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console; [6 g+ ?8 r6 ~3 e/ b' A; b
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码

5 V' |2 g" ]4 M9 ]8 W( v% h: a9 A7 }7 {
理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。! h" a, E0 h: t% {: D. B/ N2 ^
但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。, o2 D0 Z8 B' k' z

1 ?& v5 o1 L7 j0 X, J3 |3 ?* a' l. B. i3 h& z, F
; a9 \; q+ W2 B( d2 v& L& ]+ q8 R  V+ l

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑
. A2 y  N* L0 s7 {6 }( O
8 G+ m4 A  H- t0 M9 A忽然有些觉悟。* p7 n: t  D/ ^7 \! a4 h+ _  H* r* Y
将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。
, X5 j: |! w, m) E9 o) v; w; B在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题
1 W7 o" l4 B( G4 ?3 T在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-6 04:11 , Processed in 0.064265 second(s), 14 queries .

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

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