HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 f9 H% @$ _* @$ O& K
' T6 r. l' N5 Y% h4 U' Y- o: y9 X& A public Object buildActions () {4 F$ O/ U6 _* p+ Q
super.buildActions();
& `+ l- R5 a, F& v' g! ] z; R4 q* M) R
// Create the list of simulation actions. We put these in
. [8 T; R* [3 J- X // an action group, because we want these actions to be
4 u4 S: W' }, Y/ m8 y2 z6 K // executed in a specific order, but these steps should
( O8 s8 S0 o: { // take no (simulated) time. The M(foo) means "The message
- C& z4 Q9 n0 [7 [; o1 c // called <foo>". You can send a message To a particular5 u" N- p( g5 }/ K
// object, or ForEach object in a collection.
# G; ^' L: P% E' z0 @9 i( F; w
& H; O* O7 p% ~* i! t8 o# o // Note we update the heatspace in two phases: first run
- ~2 |: b" P+ L! e // diffusion, then run "updateWorld" to actually enact the
- { F, @5 E. G; V% }8 { // changes the heatbugs have made. The ordering here is
7 l: M# @# K% `, g* a' w // significant!
8 K. j$ Q7 C G8 T : S3 Y6 p, l0 [: i
// Note also, that with the additional
0 Q0 w, z2 ?6 G: G' b+ N0 n8 v& W // `randomizeHeatbugUpdateOrder' Boolean flag we can) C7 K( Q7 m2 |: b4 S9 b; B- G- m
// randomize the order in which the bugs actually run% y+ g$ t0 h, S j6 l6 R! N" d
// their step rule. This has the effect of removing any
+ m; s4 r7 B4 j% R5 j& D! T // systematic bias in the iteration throught the heatbug d1 p# o9 Y5 n, W
// list from timestep to timestep
7 U- r4 v7 ?" _: D9 {: g: E
& _3 b/ H6 e& J$ N" k // By default, all `createActionForEach' modelActions have* M1 P8 X$ x/ [7 ?+ V$ Q4 c. z% H3 E
// a default order of `Sequential', which means that the
0 g* }/ N- O2 d/ N% o // order of iteration through the `heatbugList' will be; [& }# K5 F# S* {9 u
// identical (assuming the list order is not changed
4 q$ s$ g& t4 }$ k // indirectly by some other process).' B. a5 E8 n8 p3 t: X- k
% H6 i, ` b, y0 n( a- @ modelActions = new ActionGroupImpl (getZone ());% w( Y( R# }' Y+ c) f R! j
; S p3 }# u0 g6 G try {
+ Y* [7 t" O" K4 {7 t1 Y modelActions.createActionTo$message1 K7 n; X$ `+ R( s( c
(heat, new Selector (heat.getClass (), "stepRule", false));* ]! ?* [+ @0 A$ t% s7 @2 }
} catch (Exception e) {
- r2 m% F: {1 m7 n7 b: G n; m) f' A System.err.println ("Exception stepRule: " + e.getMessage ());8 r, L# j8 `# R) c8 C! \
}
% z# Z2 v, c; X/ `; n5 W4 a3 f0 q0 Q( K: D3 @ g
try {
( r3 ^2 N" M7 {% ?- Y3 E Heatbug proto = (Heatbug) heatbugList.get (0);
- |8 P' ~) s3 b+ e: W Selector sel = & _/ G$ L" x0 L
new Selector (proto.getClass (), "heatbugStep", false);' W( b' T8 K- W- i
actionForEach =8 r! ]- T6 R9 B+ n; F
modelActions.createFActionForEachHomogeneous$call* n2 ^( |' r5 \# u2 G3 ?7 |
(heatbugList,: b# |5 _# R4 C( Q: u
new FCallImpl (this, proto, sel,
6 X: ] n2 f/ g, ~8 A4 `8 n9 t new FArgumentsImpl (this, sel)));0 d* |" B% g. ]8 j1 Y) s
} catch (Exception e) {: `4 C1 L0 N3 ]2 @/ e
e.printStackTrace (System.err);
# n, F8 ~# v/ L0 M& W }( C" z& n7 [: K9 q& A3 {
& ?4 a- E7 W, P( r; ]2 v; s- U
syncUpdateOrder ();
4 L. I. f$ K: C4 o
, x1 ? b- F' p$ q* ?5 { try {
0 h& \7 n2 z) V, K modelActions.createActionTo$message
' {/ r9 N: ^) q* t; }" [ (heat, new Selector (heat.getClass (), "updateLattice", false));9 h$ V8 x$ j- o
} catch (Exception e) {
, t' C- }$ t: B' X5 x) m0 s2 v System.err.println("Exception updateLattice: " + e.getMessage ());
, F7 p1 {9 y, Y4 ^5 p2 O+ k }$ x- I5 E+ C; w1 z! J6 E
+ ~: F$ W1 n0 b // Then we create a schedule that executes the6 G# b1 w4 I: \ H
// modelActions. modelActions is an ActionGroup, by itself it
( R( M# N& k' a* m6 f3 _0 M& n6 W // has no notion of time. In order to have it executed in3 P& t: a6 ]9 [" k' ]* ^) Y
// time, we create a Schedule that says to use the
( ^# w- N2 H C p% H0 L4 t // modelActions ActionGroup at particular times. This
% ~1 n4 Y5 A: R' I6 Y // schedule has a repeat interval of 1, it will loop every* }' N4 x4 v0 t: ]/ f9 _* ^
// time step. The action is executed at time 0 relative to
3 [! } f6 {' O+ V) Z3 P" c3 K // the beginning of the loop.6 }7 S: u$ W) }) \% X% n. y2 `) B
6 T% Z3 K9 G1 n8 x$ U- Q
// This is a simple schedule, with only one action that is
% d8 @) R/ p _$ f. ] // just repeated every time. See jmousetrap for more
3 U- X$ W X, ^. x- S2 P // complicated schedules.
; e5 x/ w5 p; \7 B3 r* z6 E: ? / b& l; c9 \& @3 z& M. o- a$ C
modelSchedule = new ScheduleImpl (getZone (), 1);5 n1 H& k# W+ j( |0 N* J6 ^1 I
modelSchedule.at$createAction (0, modelActions);3 F( a. p8 m- }: V
3 ?! X5 _ W3 U. S return this;
' Y0 V8 A5 Z; } } |