HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% \5 C9 {& n+ X8 Z& ~9 V
9 ~) g4 o8 J( ^; _1 G* C
public Object buildActions () {
8 s/ T: P$ n) _- U8 j; J; t. D super.buildActions();3 W5 m9 P$ V& `( n6 g0 \% l1 W1 v0 G
1 v' L7 L- {6 Y, J4 [& {
// Create the list of simulation actions. We put these in0 @0 S2 J+ a) y3 J
// an action group, because we want these actions to be
; ^6 B2 q: v% L // executed in a specific order, but these steps should
' o1 _/ F% K* T/ H$ u // take no (simulated) time. The M(foo) means "The message
6 i- j: p7 A) M9 @9 R& V // called <foo>". You can send a message To a particular
& I1 |% ~6 y& ^9 b0 f R // object, or ForEach object in a collection./ J9 F/ c+ M& P. q
# M S+ p9 B5 i# b9 |# C2 V8 o
// Note we update the heatspace in two phases: first run
" F! I5 @& v0 r // diffusion, then run "updateWorld" to actually enact the
" o4 ^% ?& q/ @2 t! h // changes the heatbugs have made. The ordering here is% u$ D" E7 P2 M+ ^' W1 d9 U5 z9 x
// significant!
Y7 I' e, ^1 L) C ( ~7 Z8 R1 l4 t& O
// Note also, that with the additional
. ~. p) W3 Y& ]+ N // `randomizeHeatbugUpdateOrder' Boolean flag we can
2 T0 }+ x8 n- K4 z, ? // randomize the order in which the bugs actually run7 R2 j$ ?2 i% l* }
// their step rule. This has the effect of removing any
1 ~" ?# C8 j+ J# T$ ^9 D# _ // systematic bias in the iteration throught the heatbug
( Y5 R* i6 s/ W: J // list from timestep to timestep7 V5 x8 @( V" @/ b7 z
% c6 p% Y, M9 S" r" g7 I, @ // By default, all `createActionForEach' modelActions have5 f- R2 P3 x- m; O
// a default order of `Sequential', which means that the
7 A5 a; |0 T9 A) u& m // order of iteration through the `heatbugList' will be# z) N h/ x3 ~
// identical (assuming the list order is not changed1 t" C: d8 g. ~6 Q% p
// indirectly by some other process).
4 x/ ] d+ |- A8 K. N5 d
% C. m/ { _% u: y' S9 ~ modelActions = new ActionGroupImpl (getZone ());
; I0 @3 ]3 Q% c' c S
( \, k+ A, O$ k+ t' x( c try {( O- U( h0 d$ C
modelActions.createActionTo$message) E7 l+ H( @+ i) e% \( |- O' Z
(heat, new Selector (heat.getClass (), "stepRule", false));
( Z& O8 T' f1 o" Y& ? } catch (Exception e) {4 ~8 d) r: T \
System.err.println ("Exception stepRule: " + e.getMessage ());
0 \3 \* x% k. S: n# b7 i' |7 } }
- l1 c9 N9 O* H7 \
. ^" G2 D) l: p: H8 K+ ^ try {4 k9 O% `# N3 H' ^7 T8 j
Heatbug proto = (Heatbug) heatbugList.get (0);
& q: z; {( o! }3 q Selector sel = # {0 r- e4 T9 n6 E7 I
new Selector (proto.getClass (), "heatbugStep", false);# N/ ~/ C+ w2 R* s0 _4 N2 N( u
actionForEach =
. w% C; A) A; H2 E l( Q4 G3 m0 d modelActions.createFActionForEachHomogeneous$call
* m/ G+ D* } ~/ E8 u" ? (heatbugList,6 a) f, x0 \/ u
new FCallImpl (this, proto, sel,
! b, ?7 ]* \! k0 A8 x# ? new FArgumentsImpl (this, sel)));- J R X& h& }. t
} catch (Exception e) {6 Y$ n' \3 s1 c3 _4 u
e.printStackTrace (System.err);. W ?' k' J, O
}
6 z& V/ F8 I0 {8 `
0 t" [$ z9 a0 ^6 k( Z syncUpdateOrder ();1 }8 D; _2 E R6 o6 b8 U
3 J8 q) b6 _- ?1 b: P0 u
try {
K. U3 {' E. }/ g, t/ T modelActions.createActionTo$message : s* s8 Y7 [8 ]; ^$ Y' n
(heat, new Selector (heat.getClass (), "updateLattice", false));( K1 w( {, l P) d$ Q, H3 M
} catch (Exception e) {# _, M( k; c |; r% E4 |0 j
System.err.println("Exception updateLattice: " + e.getMessage ());% i6 t7 z; h7 m1 v. l, f) _$ g' P' b
}
6 _2 d# v+ f. o" v4 N* U * i$ o' x; c' C0 |: z
// Then we create a schedule that executes the
8 R: @: x; U2 T // modelActions. modelActions is an ActionGroup, by itself it
; a. ]( _3 n. O" R // has no notion of time. In order to have it executed in
% \. z" z$ w! z5 w& E% ] // time, we create a Schedule that says to use the4 _! g9 j' V0 ^) D$ v' s
// modelActions ActionGroup at particular times. This* w, [8 M6 j6 F W# N: r
// schedule has a repeat interval of 1, it will loop every o; k- _- l( M3 g& Y8 N# `, q
// time step. The action is executed at time 0 relative to' e6 C6 A5 A8 T1 T8 a" I
// the beginning of the loop.
- f+ E9 t4 K' _. y% X& ~- G' y; ]* }
1 W' ]6 x& b) h% s // This is a simple schedule, with only one action that is
+ r5 c @2 Y' [6 @( |$ Z // just repeated every time. See jmousetrap for more
8 }, {: n, j' q9 P1 P% z // complicated schedules.7 g: B- e: W/ z' \% m
0 ?& I S! y0 m0 F8 Z
modelSchedule = new ScheduleImpl (getZone (), 1);
! ]& |1 r i+ A modelSchedule.at$createAction (0, modelActions);
3 e* ~) H4 W8 }! ^( U: N9 i
9 v b M' ]# m1 Y return this;
& |/ i& X( R% ^' O7 t } |