全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑 ; ?5 F: U# T9 ]# M+ A' ?0 M
5 s, F( n9 v4 b7 I: w
  D# G8 O, S& p: k
如图所示:
! M, R- W5 P/ n' C( s- C7 S使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:: [# x/ M( P7 M: m7 G! j
  1. /**显示处理器加工时间*/" K! {& t. V6 X
  2. treenode current = ownerobject(c);
    " i8 c1 d# l; J8 ?0 P' T4 S
  3. treenode  textnode = param(1);* U3 r# K  r( ?; h0 E" I

  4. ! u; V, r9 v! W, P5 [/ d2 F
  5. string starttext = "Object Stat: ";
    ' O7 d+ |. d2 T0 Y) ~
  6. treenode involved = node("Processor",model());. v5 G: t+ y! z  Z
  7. string statstr = "";: V+ @) t, D1 B
  8. 6 q* R6 ~9 L. I. J
  9. if (content(involved)>0) //如果处理器上有临时实体3 `+ @1 Y! n# x# m% C
  10. {% F' h2 b! \* l, |
  11.         treenode item = first(involved);8 |4 t: H+ E( v- s& k4 k: q+ K
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)
    1 G" E8 |% b3 J/ G; E
  13.         {//如果处理器处于加工状态
    $ r/ n3 V& A1 S) D6 D
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);. a3 z+ Z1 ~  M0 a, {  M4 G( S( t. {$ p
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    3 n' H5 p$ l, W% A
  16.         }        $ ^4 X+ U7 G% v7 B7 I" S
  17. }
    + M7 w/ ~0 D6 _6 B" N  B: e
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console, Z9 I1 f1 ~; _2 h# M* L
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码
& a7 y: G" c6 l# c. b
( m! z' V% d& b/ h
理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。
' J" H' \7 a2 g. Q1 |但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。
1 W: i/ u# `6 z
) [% n% E  b7 ^
1 e% `) T4 T( i% T8 }' R  e- }
6 ]& e0 X7 p# l+ _2 S

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑
$ n  Y( c. H; ~9 M! O0 U9 ]9 _! G+ T6 {0 d
忽然有些觉悟。
& }+ n" D3 V9 H7 q将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。
: M. i$ |2 {' d3 d9 ^4 C3 j# E( C. b' i在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题
- {/ R! t, F9 G7 W在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-1 08:12 , Processed in 0.084936 second(s), 15 queries .

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

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