全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑
& c. R7 u# X+ L  {! _0 R, C7 }8 }* p, o9 y/ v! b; d
. N6 g" a: e( G. e, G1 u
如图所示:
7 x2 q7 |& d( B使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:' D6 E) L; }/ s- `
  1. /**显示处理器加工时间*/9 ?/ \8 U7 e3 s
  2. treenode current = ownerobject(c);& l, ^) A5 v+ N; o
  3. treenode  textnode = param(1);
    7 ?, w6 u3 E% f

  4. % _" V, Q& P4 n
  5. string starttext = "Object Stat: ";# T8 b2 u7 I8 K5 f. ^
  6. treenode involved = node("Processor",model());
    6 v" T; K/ h0 M" x
  7. string statstr = "";
    ' v7 U' a$ N8 l( g1 z' @
  8. + a: g# U5 p) T( u- ~% K) m
  9. if (content(involved)>0) //如果处理器上有临时实体
    3 n8 P. n  E2 G3 t; b0 {
  10. {
    ( J9 P! }: t: A: l
  11.         treenode item = first(involved);' U: O6 q  j! ?4 ?, R3 E( ~$ X
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)/ O6 W9 X7 ^% g  Y; @
  13.         {//如果处理器处于加工状态
    / B+ j0 i0 ^1 z# e- p3 j6 c
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);
    + Q8 o2 J/ P; Y  Z! a
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console7 j' c0 e8 O. ]/ K+ z. i# F! ]
  16.         }        
    4 \" F( T! h0 M8 ?
  17. }
    7 j. m+ v& l6 ^2 s) u; |( P
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console/ {" T* a2 Y7 B, C/ G" U/ \! n
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码

$ O6 I: b! E5 Y9 C# J6 l
3 s" C: c2 @( }& ?理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。% y8 Q$ F# J5 x9 l
但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。% w7 g$ U- {! F4 U9 N* N

6 t; x" }0 h/ V; Q" z: H( `( _% H8 U9 W; }2 e' B, ~2 f
- J7 u4 E1 ?. X

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑
% Z( [  ?) f1 c5 X' _. t8 l0 h$ d  z+ b( W( x% T: y
忽然有些觉悟。* L) f, E& b- m+ s% P( K
将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。
: C  d% t' q  z# v/ q在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题* [: ]& t. F6 V7 A
在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-1 07:07 , Processed in 0.067523 second(s), 14 queries .

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

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