HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 x k4 t- W9 j1 y
" n* ^0 N0 a2 }& r. i* Q9 | public Object buildActions () {
/ z, J( v7 a6 w) ^ super.buildActions();
& d( h0 f; y! T. R
+ R8 m+ w- ^. I, D // Create the list of simulation actions. We put these in4 @6 F6 L1 u; [1 w- {
// an action group, because we want these actions to be( C2 k$ }$ o5 |3 Y/ J
// executed in a specific order, but these steps should6 d/ V' g5 H s3 l# @
// take no (simulated) time. The M(foo) means "The message& ?" n& }* y9 K( K7 O, m
// called <foo>". You can send a message To a particular
2 N2 B3 H; `% G w1 F // object, or ForEach object in a collection.
" w- l) E( V: m/ o/ T# O; e
3 }& @, I1 Z! h* k) _. }- D0 Y // Note we update the heatspace in two phases: first run% L z" S& Y* s) @8 j: v: p5 m }( v
// diffusion, then run "updateWorld" to actually enact the
) g% F! t/ y/ H2 t, C // changes the heatbugs have made. The ordering here is9 k5 n1 u$ g+ R
// significant!
) `: A& S9 J2 k+ b% R0 ^' N
4 l) B: | X' J // Note also, that with the additional; G8 l( @2 \/ ]6 e6 \
// `randomizeHeatbugUpdateOrder' Boolean flag we can
0 K# [6 y6 d1 k' ~$ ]9 v& g // randomize the order in which the bugs actually run! o! R' @1 b5 l" y: e/ B
// their step rule. This has the effect of removing any
1 T1 k( C) |: v // systematic bias in the iteration throught the heatbug6 b6 h% W Y* U4 Z; u! X9 A
// list from timestep to timestep$ y, Z" s) T& u! T/ n$ f
' |8 n7 x% F) ^# R# e
// By default, all `createActionForEach' modelActions have
$ S( v5 E8 X. s) g6 D$ f // a default order of `Sequential', which means that the! m% ^: q* s# p
// order of iteration through the `heatbugList' will be
. I3 F' d/ b( }) Z6 y // identical (assuming the list order is not changed+ a, n4 |6 r$ z
// indirectly by some other process).
9 l9 y: g; v" K
2 j& t3 ^9 o! a+ r+ Q0 j& O modelActions = new ActionGroupImpl (getZone ());
t/ q2 l% F" V: `' _! e g& E v6 q% I8 _
try {
4 l. s/ p( W! z; N& `) a+ H% S modelActions.createActionTo$message
, h4 ~) X- l& c (heat, new Selector (heat.getClass (), "stepRule", false));+ k, y1 v- ^) {' y- w7 _* H
} catch (Exception e) {
# E- M. |+ a( k7 | System.err.println ("Exception stepRule: " + e.getMessage ());; a4 h, w* D# H" H
}
+ ]: h3 x% p V( v0 J1 H
: c- m/ C4 j3 s8 `$ C try {+ n+ w% t9 d, z+ ]2 z
Heatbug proto = (Heatbug) heatbugList.get (0);
# s: ~9 [5 q. m9 n Selector sel =
! }/ p" c) R" l/ p$ W new Selector (proto.getClass (), "heatbugStep", false);7 F% |8 A- Z/ @0 |
actionForEach =1 y. v' q H& D3 n
modelActions.createFActionForEachHomogeneous$call
0 J% I" r# e$ F. | (heatbugList,
, H- A, Y! L) z& k# w6 P# Y new FCallImpl (this, proto, sel,. Z X5 e+ ` y l
new FArgumentsImpl (this, sel)));
]: [9 U. E1 Y! u4 |6 A$ b! T } catch (Exception e) {% J0 K- N) W) X( ?% m- G8 ]- a# f- O
e.printStackTrace (System.err);) u& I+ g) A0 m
}8 Q. J \8 a; f; t
/ @4 ~& k7 x% o) _, u- d: [ syncUpdateOrder ();
" g) Q, i- x3 ?. P/ m
; P; D$ B0 S" R try {' a3 V1 f6 G! y. e# l4 p* {" ]
modelActions.createActionTo$message
. x3 e/ d' G K (heat, new Selector (heat.getClass (), "updateLattice", false));
* ~* u/ a9 T+ `, t0 E7 A, D } catch (Exception e) {* z$ F8 E- [" |& i }
System.err.println("Exception updateLattice: " + e.getMessage ());
1 ~ K \- p/ ] }
* K. X/ P |* X' W5 O2 m0 c ' ?6 y+ e. \3 a2 Y
// Then we create a schedule that executes the- \: @8 h4 Q9 C3 s
// modelActions. modelActions is an ActionGroup, by itself it2 R4 s' ^: L, {
// has no notion of time. In order to have it executed in
3 E8 L1 X: ^* t! P2 {* B8 d // time, we create a Schedule that says to use the
/ n0 U+ [4 t/ v# X o // modelActions ActionGroup at particular times. This
# E. i5 p* @2 y# J* _$ O( c3 P$ E // schedule has a repeat interval of 1, it will loop every
$ l' |9 ~6 [$ i+ D7 n+ X: r9 v // time step. The action is executed at time 0 relative to2 d/ e( \ l9 L5 d" ~ r. h6 T
// the beginning of the loop.4 d8 L6 a5 N& X) [& F* n7 N9 Z
/ a U2 _. v/ @! x+ j( f // This is a simple schedule, with only one action that is9 F# v6 A* Z( \2 W. l
// just repeated every time. See jmousetrap for more
8 D7 p7 q5 ]' o7 F1 P- {: N; M // complicated schedules.! @- N- j+ Y! }+ p" F/ h- Q& H2 i* w* x
5 G" j/ y2 Z$ p* e$ s1 e6 C/ r
modelSchedule = new ScheduleImpl (getZone (), 1);
% g4 c/ J# M# o1 o. N2 P+ t5 K modelSchedule.at$createAction (0, modelActions);
0 X+ D% V, [' N( n , J( Z. z; s* w. k9 t
return this;: j) ^) P) B4 c; G4 ~
} |