全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑
, L! o% c# e5 J# o- G2 @
/ m, R9 P) Q6 O7 i( D* m  u; x2 T2 w. @+ A* U
如图所示:
) V4 w4 L% v1 c: m使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:
2 w! R- @  c) P' G8 U+ F$ @
  1. /**显示处理器加工时间*/
      m2 a7 L, ~- e' M; ?2 @; E  V
  2. treenode current = ownerobject(c);
    / |4 c3 w/ e* t2 U4 U- t8 u
  3. treenode  textnode = param(1);! k9 o; }" o0 v* O: g5 [

  4. % F2 W! U) g0 d( I1 `
  5. string starttext = "Object Stat: ";0 [. ]( V2 x8 H$ S8 a) C) m5 P
  6. treenode involved = node("Processor",model());' i2 Y/ O" Z, G# _/ H+ O
  7. string statstr = "";+ r/ _* M( ?9 x, @
  8. , r. ~) I! I) B2 M. h* ~6 X
  9. if (content(involved)>0) //如果处理器上有临时实体0 n8 E# ]+ z6 `! r! [. F
  10. {( Y: c/ `* C1 r+ T
  11.         treenode item = first(involved);  B9 }' V' `3 h! g  R
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)4 f1 [' @' J/ @7 f  \  V
  13.         {//如果处理器处于加工状态
    : D1 d( V# |# Z" V6 I# z
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);
    9 U$ }" K- y8 b& ?
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    % V! q4 p6 B! }
  16.         }        
    9 T5 ]3 `+ A0 V6 s
  17. }
    : w( y; R) C& L4 a7 a  Q3 U
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console+ i  I1 K# d$ F. X9 V& L: @3 P0 P
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码

6 f7 }3 I4 h4 o* f  _; v; O, O
3 S5 J$ J& ^! ^+ r理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。% @8 C$ G' U9 e) ~
但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。
, s: O3 K* h% ~) C; j( Q0 [7 D3 S, n3 d- A6 k5 J9 G

$ G9 U- C6 g2 T4 r, i5 Q
6 _  G5 X% p9 f. d* Z

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑 3 W- S1 x7 ], n: r( t& r' h$ z) h% B
+ f/ W3 R5 S3 u- \, t) J
忽然有些觉悟。
+ {! H7 m$ R6 S; H1 O将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。2 [; B8 f( n$ e5 ]. J  m* b; x
在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题2 i7 V% p  H0 m& |+ Q
在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-29 11:08 , Processed in 0.082079 second(s), 14 queries .

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

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