全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑
7 E7 \) c' s1 Z. H6 r$ h
4 S& i* s2 r; K/ x) ^# V( |: f: E+ @) C+ j0 r
如图所示:. C( _  k: e6 U+ Y1 B- ^1 V
使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:" R, j% M% }7 z7 R+ f- `) R
  1. /**显示处理器加工时间*/% n4 u6 Y( L" S8 q4 Z0 n& c( A
  2. treenode current = ownerobject(c);
    * e+ }7 S1 P3 \
  3. treenode  textnode = param(1);* i, o0 f: q& ^, A0 o
  4. " T. C" B1 [% M
  5. string starttext = "Object Stat: ";1 }/ d( m0 ^/ R% D- _- M5 m
  6. treenode involved = node("Processor",model());" L4 ]! f0 H+ q/ ?
  7. string statstr = "";
    5 ?. j! }; T! d

  8. % v% h. ]0 L' m( k; b0 I, N
  9. if (content(involved)>0) //如果处理器上有临时实体
    9 a; P; p4 k4 C. @
  10. {
    ! O; k2 \* [+ @* A; }9 i+ y# Z
  11.         treenode item = first(involved);
    / s/ w6 \! p% {4 h  n5 m
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)/ g) F0 l/ R  C8 L8 W
  13.         {//如果处理器处于加工状态
    5 u3 ]; t0 E! k1 r1 j, n5 [6 [( b# @
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);
    7 c3 {! \9 L, w
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    7 d! M  l- a8 y
  16.         }        ' i. Z) p* a2 f1 \1 w" V8 K
  17. }
    4 e7 @, Q' X& O* k. w6 j
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    " K! P2 j& J! B# |8 L
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码

8 f/ F1 d+ X# c, A( ^" }. d& f2 A
) @$ H* ^& c1 c1 ~" j理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。# v: q) {$ U$ X
但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。7 G9 F" c+ y+ f0 ?
* k  Q3 x. y% R8 u& t7 V& g/ B

" [- Q( H& g2 Y. \2 k9 t8 G" h$ e  |1 W) X4 {) @# B" S$ u  Z

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑 ! M- r$ }7 Q7 E/ @' J

9 m! A$ i$ P9 \) u" M7 l3 Q5 N忽然有些觉悟。1 Q3 Q7 g! l/ K, O( e
将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。- h; |' w: C2 r
在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题
# l# T) j; j( `; @1 V在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-6 10:07 , Processed in 0.060041 second(s), 14 queries .

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

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