HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: e9 Q e! L& ]" |9 ?# G. x. B# T6 _7 P
public Object buildActions () { _# V) m0 u; v# M6 t6 b
super.buildActions();" Y1 e- g# i3 b& P7 B# k' Z' f1 D6 X
/ W5 t5 o" D8 w( V6 i // Create the list of simulation actions. We put these in5 z( A6 u0 H* h& E# ^0 p; P. O
// an action group, because we want these actions to be* ]9 `( z1 S, s$ `3 c( n+ G
// executed in a specific order, but these steps should% C4 A' O' Q# D* i9 T1 F
// take no (simulated) time. The M(foo) means "The message
4 n3 \2 V9 i/ s* d/ I // called <foo>". You can send a message To a particular
6 F# Z0 W4 }- p; _) W // object, or ForEach object in a collection.
& [' g, Q: ]* b- v+ L# W 1 x: h+ p% a; ?
// Note we update the heatspace in two phases: first run
+ {3 h* v5 u9 _- B // diffusion, then run "updateWorld" to actually enact the
9 T: n* W0 Z% U1 \ // changes the heatbugs have made. The ordering here is
9 b- {. V9 v+ ?1 t0 i3 ?( c/ } // significant!: Z3 y1 d% i; E/ ?. X9 s
' v# ]2 B4 t/ u Q" l& W
// Note also, that with the additional
! [7 G& z! M, X3 s0 _' Q // `randomizeHeatbugUpdateOrder' Boolean flag we can
1 Y6 t `, \( b9 `! N // randomize the order in which the bugs actually run1 n4 ^" z3 @' T& s! \. ]% d' j! _
// their step rule. This has the effect of removing any9 R$ e. i. M% ~5 z. X* a; L
// systematic bias in the iteration throught the heatbug0 ~# M7 Y4 h; e: T6 L% K4 u
// list from timestep to timestep
: h: x8 j& p* x , t3 y; ?, Z' H& m+ v O3 k! @$ I
// By default, all `createActionForEach' modelActions have+ N. l2 b: G4 x6 ]
// a default order of `Sequential', which means that the
7 \$ R9 @4 Q' a4 ?7 ]6 E% Z% h // order of iteration through the `heatbugList' will be
* ^+ ?+ b/ k4 u // identical (assuming the list order is not changed4 l1 z+ w f1 B( h! }/ `- O
// indirectly by some other process).
2 r/ [0 z/ J) o& G7 A, P# z) O
: J+ m- n/ j- T+ W& I modelActions = new ActionGroupImpl (getZone ());) p: `; [* W0 i( S+ {: H
: A* f$ e" H) B& E4 z8 J8 F5 u. N% B try {, v1 v5 o. P5 Y/ E; {
modelActions.createActionTo$message
1 D( Z8 d& s& a& V: {& V" U (heat, new Selector (heat.getClass (), "stepRule", false));% ^. c$ S6 U( X& k
} catch (Exception e) {3 S0 f* U, g0 _; g6 s
System.err.println ("Exception stepRule: " + e.getMessage ());5 O- t- r5 R/ K
}
8 T3 o% B/ }% p8 k. E0 B
7 K O5 ^) }# O# f7 G# N6 |6 l( ~ try {
6 W# O i f% k/ w: j$ t8 D% Q Heatbug proto = (Heatbug) heatbugList.get (0);( p6 k2 M" Z. g7 Y4 ?. ^2 S/ q
Selector sel = 9 O1 F% i/ `' N
new Selector (proto.getClass (), "heatbugStep", false);2 o8 _- y) i- F: S& O ^
actionForEach =
' H* E0 e6 E3 ]7 M) n+ P/ A modelActions.createFActionForEachHomogeneous$call! u3 [3 C3 a" ^6 O- c" a0 t8 ]
(heatbugList,# v2 V, D2 i6 l+ \: M% k
new FCallImpl (this, proto, sel,# d+ f1 y# T! r3 E: Y4 Z
new FArgumentsImpl (this, sel)));2 o- g! O+ s4 M% z% q
} catch (Exception e) {
3 ?, Q1 e3 _0 |) y e.printStackTrace (System.err);
& A( B8 M* {# |( N$ [6 M- ^! J3 _4 ^ }
$ b8 t: s5 P T$ o
' h0 {3 r3 ]9 h, p syncUpdateOrder ();
; ^+ k7 d Q& E1 G( J R
+ ^& R+ U7 x& H: K3 g try {( T! o- E- o; F/ j) w5 z( s
modelActions.createActionTo$message ( R# w; u; J9 `- b
(heat, new Selector (heat.getClass (), "updateLattice", false));
% Q! M( |! [6 G; H$ x" D7 w } catch (Exception e) {
* N+ o7 U, H( G1 U+ | System.err.println("Exception updateLattice: " + e.getMessage ());
. N8 ^1 p' x; X' _1 ?( a, V }& ~( `" v# L. D2 C: C% N& E- H' ?
6 g) I3 Q# h8 | O
// Then we create a schedule that executes the
" l/ N; [, X5 X: } // modelActions. modelActions is an ActionGroup, by itself it
7 f0 r8 l5 A0 @$ L5 I9 l // has no notion of time. In order to have it executed in+ Z" Z' h' z$ G; D- u& F
// time, we create a Schedule that says to use the
0 T5 m% n0 _) E // modelActions ActionGroup at particular times. This
" p( ^- C1 k/ k: t // schedule has a repeat interval of 1, it will loop every
Z5 I7 l1 k. W- w0 q0 i# A1 G; B( V // time step. The action is executed at time 0 relative to' w9 h! g* F$ a# q6 T7 P
// the beginning of the loop.
; O/ i7 y5 i! c: J( \0 B# O0 p0 s' k7 p$ f4 X* R
// This is a simple schedule, with only one action that is
4 X9 f) }- h* ]4 @8 }/ Q/ k // just repeated every time. See jmousetrap for more; Y9 d' G# Q* ]. X1 O6 y
// complicated schedules.
# {" Y3 p+ i0 B4 S/ F: x% ^
; Z7 O4 l1 h$ C" A% j& }0 A modelSchedule = new ScheduleImpl (getZone (), 1);4 c0 i9 ^: y7 p7 S3 i
modelSchedule.at$createAction (0, modelActions);2 u* q; a) t3 O$ ?; | @2 M5 g
. m3 \% q2 o0 @, W# j' A return this;
% t" N( x/ Q4 h* j, L } |