全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑
6 F8 b0 j. M% c3 c8 n& {+ S' ]% q: @$ U( [2 A

7 n* _; g3 O' Z( e4 O6 ^8 E: A$ Q如图所示:
( V  J+ ?, T) c- m1 b: z使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:: ~. @9 b. v4 n6 }$ t* S* Z8 k; ?( c
  1. /**显示处理器加工时间*/
    6 H* c. T: M  V9 u  ]& v+ s5 Q2 m
  2. treenode current = ownerobject(c);+ ~) W6 q% C7 M5 v# H; `
  3. treenode  textnode = param(1);( U% e  b. ~  I) w+ Q" C

  4. ) I) l- G' ]) l/ A9 x9 f7 C3 ?% [
  5. string starttext = "Object Stat: ";
    : \& \  R- i* r
  6. treenode involved = node("Processor",model());! w7 s8 @6 `" |/ S" @* F6 J
  7. string statstr = "";. ^. h/ m4 f" r7 K( M" s

  8. - W  i* Q0 ^, J- v- M6 Q- n6 U2 ?
  9. if (content(involved)>0) //如果处理器上有临时实体' u& N: P( Q+ K2 @; {9 l
  10. {
    + g" X/ ~' C8 G
  11.         treenode item = first(involved);  R& S+ ]- [/ n. x% N
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)
    8 b0 b8 B% V" v4 a! E
  13.         {//如果处理器处于加工状态
    8 T9 g, c  _1 M
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);
    % t' F! ?" ^% ^: [$ ?' M+ P7 J
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console6 C+ o+ o, G( Z5 ?3 @
  16.         }        6 s2 m% x" V  S9 n' x
  17. }! v0 s; [, N: Q: [
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console+ ?' }+ Y. q% r% i: H8 {0 y' m
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码
+ w8 a" i0 R0 g( x; v
! r4 f" n- P2 \* B4 d. @
理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。8 N7 K# q5 e8 ~1 {
但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。2 Y  {! ~7 O; Y! s: {0 ]
6 A4 N. ~$ i$ A. x( w& g/ \0 m1 ~

' |$ y1 ?4 }" ^0 c& K
# q5 T8 {2 x- I' |' p! N" N

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑
% U6 x/ |; q/ y6 D9 \7 E# r3 i& z
5 M! m6 n* A, N3 L% q忽然有些觉悟。5 ~+ `% `4 {: f, T* g
将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。! W+ _1 K2 X! U3 M! Y! U0 D8 W( q
在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题
* y) M: P! O6 E0 U0 X/ o+ C在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

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