全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑 , f3 R1 @, V7 E
6 f9 ?: v% z  R  O
  u$ H$ s6 Y( q/ Q  |8 S
如图所示:
1 X8 W" h( I5 c. H" B2 I% y使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:- L  D3 X9 v/ t& v. r! b8 B
  1. /**显示处理器加工时间*/
    & E4 Z# l' @, t/ ^) e* R
  2. treenode current = ownerobject(c);- q( u9 w( {0 c2 p- T
  3. treenode  textnode = param(1);
    1 O! p) j1 L0 k

  4. ! n: i: g; v+ U
  5. string starttext = "Object Stat: ";+ g% C9 s* E! ~+ g3 F9 m( ?8 c# Y
  6. treenode involved = node("Processor",model());
    3 S( }, A2 D  T
  7. string statstr = "";+ B" Y! M5 i5 T0 c8 p3 M( z' M
  8. 8 m) y3 O$ a, Q* l
  9. if (content(involved)>0) //如果处理器上有临时实体7 k3 L' B9 q" k, F, s1 B% ^3 y
  10. {
    # W8 w8 E: D5 s0 e
  11.         treenode item = first(involved);- ^* B9 H7 {* H. X* j
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)( C) v- t1 u) y' C# W! Q
  13.         {//如果处理器处于加工状态
    ) g- |" m' a/ q  G
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);6 I0 M$ n) n+ q) @  W  q! m4 ^  s
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console" G* p! V* L* K& ]8 F  S
  16.         }        
    , c& S) j( v$ b7 |$ o9 b
  17. }" o+ [  H. X/ W! h
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console6 |5 y0 j( m+ u: h! P
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码
! D! q3 A, e1 S7 }

" J/ o! G' f* l. J* T( k- x  c- p理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。$ O- X3 k  {' D; P7 a, X$ K$ q
但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。& }# w0 u: [3 f7 D* L( ?  V

5 W7 p/ N- `/ f% }5 i' e: q, x8 n3 W2 ]' Y, h6 |

! N1 B( v$ R: q+ w

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑
1 O% }1 n8 n9 `* X
4 C! ~0 M% F* q8 F! y2 G忽然有些觉悟。, o5 C# \/ n" ]4 D# M) R: v
将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。
2 l( Q8 U( ]9 u在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题& M7 @( A# b' J' |7 S5 V. m8 V
在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-28 20:33 , Processed in 0.065314 second(s), 14 queries .

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

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