全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑
$ ]- v% G% d& f. `7 C; E% G$ ?' n# ^" A

7 _% r7 c. e$ Z9 e- X如图所示:
5 H: {/ Y# Y7 o* ^使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:! j3 b* ^! N4 V  n$ k/ C
  1. /**显示处理器加工时间*/6 L1 K) w& h/ G' j+ Z4 p, x6 i
  2. treenode current = ownerobject(c);1 e* H. G4 x, ~7 u. H
  3. treenode  textnode = param(1);! |; P) C* T/ _8 _, M. M

  4. & J  n- j; [! p/ ?. S' n
  5. string starttext = "Object Stat: ";
    ! A6 r' {5 v$ z# ~  F2 ^+ r
  6. treenode involved = node("Processor",model());
    7 P6 |+ J( p/ q  C8 b- a9 E
  7. string statstr = "";- b( w# _! z0 O2 w( n

  8. 0 H& c$ a+ v! T$ \) U# b9 t: h
  9. if (content(involved)>0) //如果处理器上有临时实体
    / a) {. R( x4 z: Z/ J
  10. {  L& X& ]# x) q; L* d9 Y. E
  11.         treenode item = first(involved);
    6 G4 Z, \3 m# T
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)$ V8 O6 u, [: ]1 k, Q2 B
  13.         {//如果处理器处于加工状态
      j/ A" I5 C0 P. M# L
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);! _6 k1 n$ |9 u
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console/ I$ i8 q$ Z; ]1 t& L
  16.         }        3 j% G/ F1 H, x9 k
  17. }9 M, Y/ g3 {4 n
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console; V& V/ s* F5 M
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码
2 a$ J. s+ V# s. i

& b/ ?+ B; u1 b8 K  R3 ^理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。
: u7 C' i2 k: F& }9 v. S但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。0 ]7 ^+ C1 Z6 c! `/ z. f

1 {( s% F/ h6 u  l* a4 A+ s% c( o0 ~* u) V6 R; {, N3 j* P% x- [- o: J' V
; G  N$ K2 U1 N: G  @! ^

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑 5 R5 |# U- @2 x1 f; K* n& P6 r9 e

; v2 Y7 I5 ?% N9 C+ o, _忽然有些觉悟。  d+ V+ `2 u& _# T- l' m
将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。: o: L! R0 V7 H, K
在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题; w  u3 n3 ]) W6 l; Y
在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-19 11:21 , Processed in 0.085472 second(s), 15 queries .

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

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