HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 B6 B" K7 R1 K+ n1 u: s( I! J
5 A) G. f! ]( {$ l6 S0 R4 l2 n public Object buildActions () {5 r0 D0 ?, K6 [4 K& I
super.buildActions();
( o, D3 k6 O, l) [9 i- b
! o9 B: c" a; `3 Z7 L1 ^ // Create the list of simulation actions. We put these in/ I4 v* d# E% H t' T
// an action group, because we want these actions to be
3 c' Z1 t, z7 p$ @# k* H // executed in a specific order, but these steps should# I s: l3 I" b! V
// take no (simulated) time. The M(foo) means "The message
6 c) z( O: e) ^1 v- C. B. R5 w9 |" J // called <foo>". You can send a message To a particular0 U4 B* j. |/ ?, m
// object, or ForEach object in a collection.
% F: h! @ i# L" d+ k; q7 [! p" b
6 w% | t Z3 X3 p9 d // Note we update the heatspace in two phases: first run
* D! D) T* t: o; X8 E // diffusion, then run "updateWorld" to actually enact the
) g: ? ~5 {; M' m/ z // changes the heatbugs have made. The ordering here is
' K# s) h$ K( _5 d' @8 D // significant!& }0 ^ u, D7 \1 ]1 r
7 w5 N" S% O- ]7 g% N1 q0 M9 Z
// Note also, that with the additional. a1 v6 K6 {* D; K
// `randomizeHeatbugUpdateOrder' Boolean flag we can
. p0 r. H7 k2 V6 b! t // randomize the order in which the bugs actually run
2 d. o# o% g) }" T& M // their step rule. This has the effect of removing any
5 A* C% g/ t; [1 s // systematic bias in the iteration throught the heatbug
, U7 U4 i+ N9 n# ~: L8 ]' _ // list from timestep to timestep
* q5 p6 }* w8 T! K: [5 f) @ `7 @5 I3 A$ e `9 m
// By default, all `createActionForEach' modelActions have4 N7 U# J5 k: |9 N/ H
// a default order of `Sequential', which means that the% W3 |3 u: h' M8 N4 I: K
// order of iteration through the `heatbugList' will be
3 J# a* S; c3 U // identical (assuming the list order is not changed
1 }- {5 p6 @# h9 H9 M2 w% Q+ ?( x! w // indirectly by some other process).3 y" J: O& C7 H
* H C4 U0 H* H) p k7 b modelActions = new ActionGroupImpl (getZone ());
0 ~8 _' L C; K8 y+ {" E& X( ?8 e* u, I1 K% }
try {# v/ N; J8 ?5 Y: M4 m4 c% F
modelActions.createActionTo$message' d* w& G% e% T7 i& d, x! U/ p
(heat, new Selector (heat.getClass (), "stepRule", false));
4 E& B3 U( t# X( B% h* F } catch (Exception e) {) U% V' P% F! @+ \% g; r5 k
System.err.println ("Exception stepRule: " + e.getMessage ());0 I: W; F' V3 r# Y6 Z$ p1 N+ w
}
4 k/ |6 V. K: \7 K# ~$ J. E7 k7 i$ V9 X7 g5 ~+ o# g# m! y
try {
5 a/ n) p k0 z8 F+ ~8 w Heatbug proto = (Heatbug) heatbugList.get (0);
& R, [ s4 ~# T( p+ N Selector sel = ) N3 P1 R! K3 I5 W( X
new Selector (proto.getClass (), "heatbugStep", false);, }/ w6 l% w8 c1 L# C; r0 j8 Q
actionForEach =) `2 ~6 ~6 L# N ~9 z
modelActions.createFActionForEachHomogeneous$call
+ P) g6 e6 m/ V1 u. F (heatbugList,, c) k1 R$ T" t8 B, l/ f
new FCallImpl (this, proto, sel,
& L6 ~5 J) ?1 H! g new FArgumentsImpl (this, sel)));
% l" Z7 U: Q. ^ } catch (Exception e) {- T& E& P# T* Q
e.printStackTrace (System.err);/ `/ S I. q9 x! p8 G6 j5 q
}
4 f5 ~9 G; j. a2 y, f
; R& O! w6 r; v3 Z( _7 B( L syncUpdateOrder ();' P }' F& J) P6 h% I
2 y# H" T) M k/ w try {
! _9 P) W5 M5 o6 ?" W* W modelActions.createActionTo$message 4 {3 N% G# Q, z* e* n
(heat, new Selector (heat.getClass (), "updateLattice", false));' M5 |! F% y4 K6 }. f i3 N# V
} catch (Exception e) {7 j1 V' p/ [+ ~0 p) e
System.err.println("Exception updateLattice: " + e.getMessage ());
3 e" `9 Y3 A5 x! d8 K) h" o }+ R9 }) d4 m* U, W
p% x" i. N% V3 v+ X" g6 H
// Then we create a schedule that executes the
% C/ F; c$ M1 N+ x4 N // modelActions. modelActions is an ActionGroup, by itself it/ K w# T# N- Q5 W
// has no notion of time. In order to have it executed in1 ?8 j7 N* R2 O* W
// time, we create a Schedule that says to use the
) x/ J: s. ~0 j2 a5 A // modelActions ActionGroup at particular times. This
0 n5 Z. Q3 J: _( }. N // schedule has a repeat interval of 1, it will loop every! d+ L) S0 D8 ?# `$ n T$ J" R
// time step. The action is executed at time 0 relative to) A4 G) D8 [7 U7 E& S0 h
// the beginning of the loop.( ]& M" Y: t6 j0 ^ @
( ]' l8 h6 ^' O% K9 W: X ?5 n
// This is a simple schedule, with only one action that is* b# D: `9 O+ S- ]5 c/ X; s
// just repeated every time. See jmousetrap for more
( j- v0 |8 ~5 U; V // complicated schedules.
' }' @; A, { U$ A0 L# M ! @8 Z/ C0 d6 ^- m
modelSchedule = new ScheduleImpl (getZone (), 1);
; n2 v& C& U4 y0 n+ i' i A modelSchedule.at$createAction (0, modelActions);1 [4 u( o5 R/ T' v: D1 b/ c
/ t9 t+ D$ Y4 q/ ~ q
return this;
. y* I3 `* O2 S8 ^: K- s } |