HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) o4 F6 i: N% W" r3 c9 C# ]8 V6 L) V- K& P+ q5 J
public Object buildActions () {+ ], h' F2 F, C; W
super.buildActions();7 N/ B) {& Y& q" G% {" X- X
' c7 n* V' o, X4 Q' O5 R
// Create the list of simulation actions. We put these in
5 I4 Q6 z1 B9 Z$ w // an action group, because we want these actions to be. R3 x w+ t w/ C- H
// executed in a specific order, but these steps should
4 u7 b' V) ?, J9 z2 b$ P // take no (simulated) time. The M(foo) means "The message9 B6 |* r' [2 N( {2 h; x* o e& h
// called <foo>". You can send a message To a particular
2 L+ I- ?3 ?- }" l5 q/ P" k' L // object, or ForEach object in a collection.
8 [, y2 g0 Z5 M/ b" T5 u8 {
, {: n H( G* G: H // Note we update the heatspace in two phases: first run
# P' t" `; ~& M; R* t: i // diffusion, then run "updateWorld" to actually enact the
7 O# j' L; F, {. I2 `) s // changes the heatbugs have made. The ordering here is5 D8 U" h/ ^5 B7 f. X; R
// significant!+ P, w4 E G: s9 x0 I
' l1 ]6 ~+ N4 j0 O6 N& O // Note also, that with the additional7 a: `. p% |5 p. h D a5 j
// `randomizeHeatbugUpdateOrder' Boolean flag we can' K3 p T/ d6 W( f4 ~* `) q
// randomize the order in which the bugs actually run# c) X$ z* D3 T) U+ [5 n; ]
// their step rule. This has the effect of removing any
% C$ o6 M4 X6 m2 X8 S* s; J7 z // systematic bias in the iteration throught the heatbug, z9 \9 K% }0 ]& ~( \3 f8 `
// list from timestep to timestep; B* i0 n4 _! A' V. ]* E* A5 s
0 {: }9 X2 d8 H. i; } // By default, all `createActionForEach' modelActions have1 B: [% _: |4 I& s: r6 p
// a default order of `Sequential', which means that the
8 g. d! l, |- ]8 d& Q1 P // order of iteration through the `heatbugList' will be% g |& Y4 c+ A
// identical (assuming the list order is not changed) K: S$ |, W+ a) k9 e2 D! v
// indirectly by some other process).' J- k/ B3 B: v) s
1 \ M8 n, s7 M5 X2 { M modelActions = new ActionGroupImpl (getZone ());6 @1 e' P* Y% q( D
$ G& c1 J+ E. @ try {# M8 T, \* }2 x
modelActions.createActionTo$message/ a2 c' I9 V l K2 }
(heat, new Selector (heat.getClass (), "stepRule", false));
& A- }! J4 |' l: T. F0 w# B# i } catch (Exception e) {, [# ?: {8 u; r
System.err.println ("Exception stepRule: " + e.getMessage ());
8 L( ?9 E% H. V2 ]2 g3 u7 g }
% ]1 C1 g: F$ W* s0 R. X! Z5 ]8 C" I6 B* W- E
try {- J9 I, c* m/ E- S! R! j( R4 v3 C
Heatbug proto = (Heatbug) heatbugList.get (0);
! |! [5 P$ E$ a: s" P# s Selector sel =
( c2 S$ q- ~" u# q, W new Selector (proto.getClass (), "heatbugStep", false);! e( D5 k0 h g9 @8 T$ u- C
actionForEach =
$ D4 U" x( D. }) H, A modelActions.createFActionForEachHomogeneous$call7 g, a V# E$ X T6 f7 u1 [" u
(heatbugList,5 M, f* X4 C9 n- c
new FCallImpl (this, proto, sel,' F9 m$ l1 f3 U2 d" ^+ w$ ~- |0 q
new FArgumentsImpl (this, sel)));
# f7 `8 f; w+ o! z/ { } catch (Exception e) { e' ^! e4 ?; s) @
e.printStackTrace (System.err);& {. {3 m& Z3 j; f
}2 o. D/ O2 t% K2 B$ l; i3 ?$ ?: `
# {+ X l0 c) o% ^0 S1 a syncUpdateOrder ();
2 p' d" n; s8 Y, b$ R% t3 }6 W# z, w( q! U0 W8 _
try {, _0 }' l# A1 |. h4 D( R
modelActions.createActionTo$message
" `2 G' J1 q5 U0 X7 V0 c (heat, new Selector (heat.getClass (), "updateLattice", false));) t x/ v- O3 F- W- G
} catch (Exception e) {6 k6 Y0 K! T% I3 H6 Y; @7 t
System.err.println("Exception updateLattice: " + e.getMessage ());7 C7 ]1 M/ }: J, `7 l" i5 Q
}
+ D5 E5 a+ i! U6 O2 }) J# @9 H1 V
* `0 m! n" Y; B: O+ l7 g! W) L5 @, H // Then we create a schedule that executes the
& f% c( p& B- R" x // modelActions. modelActions is an ActionGroup, by itself it
- O3 b' e) C! v; e- I7 e. E // has no notion of time. In order to have it executed in# D" M4 a- V7 G
// time, we create a Schedule that says to use the+ A/ ]0 N; C# H; ?, b
// modelActions ActionGroup at particular times. This
9 d( C: G! K U9 Y/ Y$ I: Y, } // schedule has a repeat interval of 1, it will loop every8 |4 p- B+ y1 R; v$ A& `) i! ?
// time step. The action is executed at time 0 relative to
! k, i0 F4 v3 ~' W1 B2 u' W$ D // the beginning of the loop.' H/ u0 [, w$ d% l2 s
& r: [8 U& S6 c0 _
// This is a simple schedule, with only one action that is
0 O! Q4 I! F0 O2 q# T4 t4 H; m. A // just repeated every time. See jmousetrap for more
) a6 e3 h3 ~, Z$ \+ _$ a0 @ // complicated schedules.
* u I4 Z" G, h7 g4 q% C0 L- j , c& S6 {2 Q% H. S4 @) e7 y9 }
modelSchedule = new ScheduleImpl (getZone (), 1);8 H: q& M \7 O
modelSchedule.at$createAction (0, modelActions);4 N% w2 h( `, e) b, Z! V- X
& S1 R/ ~% v3 B7 N7 R" l return this;
! f# H! y# }2 _ } |