HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
" ^4 S6 Z- q7 t S8 {+ a5 A) B- U& w7 o) D
public Object buildActions () {
2 U2 M; ~% _6 r& Q- P8 J super.buildActions();$ E& M2 _. a: F8 ?( w9 f, k" m
1 J* \- E6 y0 W // Create the list of simulation actions. We put these in8 a4 ?! B- }6 E _/ l3 ?! ^/ L4 `( M7 ~: U
// an action group, because we want these actions to be
5 y( M# u9 k& m) [" A1 l4 } // executed in a specific order, but these steps should# j' o# K, L: w
// take no (simulated) time. The M(foo) means "The message
' }# i, k& V& x% m // called <foo>". You can send a message To a particular+ Y' `, f$ R2 Q! n2 |$ s) r& K; |" D
// object, or ForEach object in a collection.0 j/ M, y( T y# u8 z2 P3 O
8 w& E5 ^% P/ K, g- K // Note we update the heatspace in two phases: first run
1 D0 ^; @; V: @1 g$ b T // diffusion, then run "updateWorld" to actually enact the* `9 u+ F, e! i& J/ V
// changes the heatbugs have made. The ordering here is
; f( b+ Q0 K( _" u0 S0 E! i // significant!
. E) ]8 }% U$ e* B
- M* A, M2 H9 h // Note also, that with the additional0 I y9 X& d t5 H5 b
// `randomizeHeatbugUpdateOrder' Boolean flag we can& ?0 A' f: I8 ^
// randomize the order in which the bugs actually run
! h3 ^" T, T* i P" e A4 N J // their step rule. This has the effect of removing any6 H# ~' h8 }0 I, O& b
// systematic bias in the iteration throught the heatbug5 h) V* g* \7 d
// list from timestep to timestep" I t; ?7 z% X$ q6 `6 w2 Q* U
2 J/ z3 t" l; {. ~ // By default, all `createActionForEach' modelActions have
' _* K9 E9 O8 ^: H; R // a default order of `Sequential', which means that the' ~; U |6 c- H u* E
// order of iteration through the `heatbugList' will be& @0 O; G' K% i; B8 I1 _
// identical (assuming the list order is not changed
3 L5 S! e1 V/ z7 d# Y$ h, ?7 { | // indirectly by some other process).
" K! \+ r) k: U; H& {
5 ]) ~3 |4 v, O modelActions = new ActionGroupImpl (getZone ());# ?, }9 n2 x" d. K% r$ z5 j. m
( \. u8 `7 @4 F$ H; o) p2 ^
try {/ k: z( M: p9 K9 u
modelActions.createActionTo$message, B# }, G; z' s8 L
(heat, new Selector (heat.getClass (), "stepRule", false));1 R8 D& @6 r( c( f# y
} catch (Exception e) {$ V# {* j& ~2 P$ A
System.err.println ("Exception stepRule: " + e.getMessage ());
# C9 f! \' ~0 Y* W$ F# B2 K }9 ~- U7 X3 Q9 k3 E
, J: j/ t+ u ?* Q) r9 B
try {
; `% j8 d! \2 i8 o! A- P1 P3 Z9 P Heatbug proto = (Heatbug) heatbugList.get (0);
1 r& W$ |0 z0 e$ g( X# c0 ^ Selector sel = ( H6 j4 ?+ T: w0 T: ~7 ^
new Selector (proto.getClass (), "heatbugStep", false);
1 Q9 w3 x X$ w% ?$ \ actionForEach =
2 g K% t3 Z" c9 {4 J5 R6 V# y modelActions.createFActionForEachHomogeneous$call
4 j: c8 m0 i8 q. x (heatbugList,7 D6 |; g( Z4 d6 p0 @* Q/ _0 h
new FCallImpl (this, proto, sel,
+ }: `4 a! |% W: ^* ^' U new FArgumentsImpl (this, sel)));; h! c/ R7 l1 A v
} catch (Exception e) {3 b1 O' g7 l% c. D
e.printStackTrace (System.err);
1 l; S2 K3 C* T0 m }8 s/ ~1 H7 D- c4 x6 F
; d& A; r5 T F6 y# A$ q g3 k8 v syncUpdateOrder ();( Q! r, T' P& i; h* |+ Z
) R, x* i1 X0 @* j
try {
1 w/ x% o: u/ U) m, y7 Q, i modelActions.createActionTo$message
; P# r& g! J& k (heat, new Selector (heat.getClass (), "updateLattice", false));( C: v7 x' O) }
} catch (Exception e) {5 `) m; }. b2 L1 i7 r* y
System.err.println("Exception updateLattice: " + e.getMessage ());
! ?. y2 E5 r z4 e) S) Y X; t }6 R/ v* ^* x8 S- q, G
" r: m# J* l) P/ [4 k
// Then we create a schedule that executes the
- o0 m1 `) G0 O7 Q% }' n- s6 B" p // modelActions. modelActions is an ActionGroup, by itself it+ |+ L4 J# X9 S# _3 \* Y3 A8 O! ^
// has no notion of time. In order to have it executed in
/ k) l! O$ U. r2 b5 A! T, M // time, we create a Schedule that says to use the" S4 f: Z% t- U! E% f$ R
// modelActions ActionGroup at particular times. This
, G, a/ J! z( S1 e6 } V // schedule has a repeat interval of 1, it will loop every
, \8 }3 }3 y; L1 o5 r4 l // time step. The action is executed at time 0 relative to, F0 x: ]: n3 J3 l6 N; X
// the beginning of the loop.) r Y% t5 v' n# C3 R
, h& X7 M& X& A* H1 g // This is a simple schedule, with only one action that is( ?$ K7 ^- t' h0 ^0 U3 Y
// just repeated every time. See jmousetrap for more3 z2 ?- ^ h, {1 h) Q; A O
// complicated schedules.
/ M p7 |4 C# d7 O4 H r3 k ' }5 J* D% A) ]9 X. t- U* M5 q
modelSchedule = new ScheduleImpl (getZone (), 1);% B$ y1 E8 z0 b) O
modelSchedule.at$createAction (0, modelActions);' q) _3 D6 {2 ~" v9 Y
4 M* `, Y# e, Z: F5 d
return this;
- ?# ~$ c" l$ F. @ } |