全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑
  l  [- h# V5 s5 G& `" ~: T: c5 y* |4 Q- q9 q
4 ]& U- Y# X1 z  r; s( p+ L
如图所示:- s. v* ]9 V( I/ }! s/ m$ v2 ~% @1 K
使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:
! f. L. D6 m) s# T5 v6 N8 r7 j
  1. /**显示处理器加工时间*/( ^1 w8 H* E; _+ H! e7 o
  2. treenode current = ownerobject(c);
    . X0 J6 C; u. U! g! d
  3. treenode  textnode = param(1);) A; }  t" o  p5 [) `
  4. : }4 g/ @1 c3 H: k4 G1 V
  5. string starttext = "Object Stat: ";
    4 K. U, w! a* \. u( k2 r5 k) j: ^& ^% `
  6. treenode involved = node("Processor",model());! n, c  y" F0 F2 g7 X
  7. string statstr = "";5 \) s3 o2 S8 C
  8. 5 J# u/ l: g/ D6 Z( G
  9. if (content(involved)>0) //如果处理器上有临时实体
    ' K( t0 |  c' y' t/ ?
  10. {
    . d4 n! F5 Q" Y0 j3 M* S$ z0 u% P0 W9 Z: |
  11.         treenode item = first(involved);  i+ c4 l7 n3 J$ }% G; U& {
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)
    # h/ H. F& b6 M; W2 v( w& ]
  13.         {//如果处理器处于加工状态. f  e3 g, w; n8 U( o$ B6 [
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);1 `( O$ \$ `! a, v( ~
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    ' _8 n/ K& T+ A
  16.         }        ) w0 J7 Q1 z. V; p& X
  17. }
    9 n& t: h0 F* c* Z) _
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console) |' K' h4 K# u! U; b
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码

. H; |0 J0 K( L, e( p9 B) i( ]$ m
理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。8 \1 s4 D5 Z# k/ R6 C+ I$ i
但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。2 W" ?2 a/ u# Z0 q
# l% t) P6 W& K" _6 y- ?  R* X
+ ^( ?" e8 k) [) L
0 n+ R6 _: D3 F

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑 ! Z2 G  E9 H, m1 n
0 n( G' b' B8 I
忽然有些觉悟。' B# |. M" Z+ d. f9 c1 H
将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。* C" Y1 ?/ o- E/ y7 X. q
在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题' }, x* L+ Z6 ?6 K, {) g
在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-6-2 05:43 , Processed in 0.074270 second(s), 14 queries .

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

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