HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! R: J2 f. @! w( Q; ~( t% z b% q
Q* m; X7 r8 G4 B8 [- Y$ s l public Object buildActions () {; o/ M4 U# R5 e) M O% W% o( j
super.buildActions();. g; H1 r u5 _: l7 \
1 [; p6 `' e5 a* ~ // Create the list of simulation actions. We put these in' M {/ [5 P L/ Y
// an action group, because we want these actions to be7 B$ J+ R4 G" L6 L5 f
// executed in a specific order, but these steps should
. t- e# i# D9 w2 _. ~$ R // take no (simulated) time. The M(foo) means "The message6 k' l2 @) u5 n+ q; }
// called <foo>". You can send a message To a particular! h0 R* r! E: g q) q
// object, or ForEach object in a collection.5 H' D" | h* a' [2 b, A
) d) U. \4 Y' n7 q) R2 m
// Note we update the heatspace in two phases: first run
[! H W- V [0 W9 u9 r* _ // diffusion, then run "updateWorld" to actually enact the
' p( Q# f; w7 \8 N // changes the heatbugs have made. The ordering here is
* R! R$ r9 C6 D // significant!
z; e4 Z) w0 n0 m( t$ } ' L7 \/ t) V% \) ]9 K6 M
// Note also, that with the additional9 w. n+ D' P5 t v, r
// `randomizeHeatbugUpdateOrder' Boolean flag we can6 }/ F8 M; t% n' s [! T7 @+ [
// randomize the order in which the bugs actually run4 N% N) K& w, W: `; m. x
// their step rule. This has the effect of removing any% g% g2 J9 T4 @% x$ V. E
// systematic bias in the iteration throught the heatbug0 s' w O9 _3 q) }
// list from timestep to timestep
1 j% w& q& x* [ 4 D; u' @5 r% q1 B7 j( U) d
// By default, all `createActionForEach' modelActions have8 F; G( I; \8 ]* _. u3 B" Y
// a default order of `Sequential', which means that the* v b/ j: D2 c. Q
// order of iteration through the `heatbugList' will be
& w' j2 |7 \2 K- C: x( Q // identical (assuming the list order is not changed
, [7 Z1 Y" V! l) E8 @9 G* y // indirectly by some other process).
, K, k/ C: F1 ]7 U) r g* l% {
# s8 f& u1 T: {* v+ m& R' D modelActions = new ActionGroupImpl (getZone ());
# v, b# b5 e" |4 w( `; R1 J; D: G5 C' \ d8 p I) M O9 L
try {
" Y) W# r$ [% D7 ~$ T modelActions.createActionTo$message" j: p& H1 K/ k+ O' _
(heat, new Selector (heat.getClass (), "stepRule", false));! a/ k# L$ F+ i9 v4 B3 V# t) J: D& q
} catch (Exception e) {$ y6 U4 }7 l8 m. w
System.err.println ("Exception stepRule: " + e.getMessage ());
, w7 C& ~, |2 J& v }1 C$ |0 C- s/ b d* F; L( C
2 j d; \- q* y* S7 ~ try {- u' s% T7 R7 W% H/ m# x; m4 l
Heatbug proto = (Heatbug) heatbugList.get (0);
' f& p8 a3 x0 t, R/ c) V8 g Selector sel =
( i7 W* z( p8 i$ ?$ A9 S new Selector (proto.getClass (), "heatbugStep", false);
2 F- C. V$ @8 y3 [0 L actionForEach =+ d8 B; |3 g0 X: O' [3 ]* B
modelActions.createFActionForEachHomogeneous$call# Q$ M9 ^" {8 {. z9 e
(heatbugList,
% S& f& q4 |( ^1 X% @5 U new FCallImpl (this, proto, sel,& k; I H/ m8 K
new FArgumentsImpl (this, sel)));
& G0 E* `0 b& o+ ?! D; y } catch (Exception e) {4 p8 d2 s5 n' n. C
e.printStackTrace (System.err);
1 r+ D2 o) Y; S9 i `, }/ @1 d }
; Q; _# { Q- @. q 1 b/ r2 u7 Z$ e
syncUpdateOrder ();9 Q* t* w/ L" O4 N0 h2 E6 \& B j$ t
5 q9 c: q: e4 y. H2 }
try {
2 n. m8 ]+ E9 w, n0 @( t modelActions.createActionTo$message 2 I* V! s4 `% D0 m1 A' [9 \
(heat, new Selector (heat.getClass (), "updateLattice", false));$ j1 _. ?" t: M; t. T
} catch (Exception e) {1 C" Q" t, d7 _* i5 R; A0 m
System.err.println("Exception updateLattice: " + e.getMessage ());- V' ~: _8 V; ~. e
}
8 p+ ]$ e i" M5 h8 H/ c1 u
3 Q: s8 ]: D$ k- Y/ | // Then we create a schedule that executes the
; z% s+ v! t0 N8 d3 ~6 I( u( v // modelActions. modelActions is an ActionGroup, by itself it
. b( N8 j, J. A& x2 ~" n // has no notion of time. In order to have it executed in8 z1 K7 h* P# o6 d
// time, we create a Schedule that says to use the
' T9 N# D8 ]8 q. G9 u2 ~4 o8 v' { // modelActions ActionGroup at particular times. This
) E& v/ B5 c% k F* h/ `. Q6 K // schedule has a repeat interval of 1, it will loop every/ {% r& d# f9 k
// time step. The action is executed at time 0 relative to/ f a' T _3 P6 H7 Y
// the beginning of the loop.
( Q1 n; |5 S; l. m D6 M- ^0 X% @& K q+ N
// This is a simple schedule, with only one action that is% O4 R7 N: e% n2 l6 V3 A5 e
// just repeated every time. See jmousetrap for more
2 t4 L7 W( |% e& C/ y; }3 b: ~ // complicated schedules.: }+ i& q+ Z$ F* q% E9 n- f
' _- {+ P1 }4 ~2 g4 A$ M- g
modelSchedule = new ScheduleImpl (getZone (), 1);
% v: ]9 _+ h' ?7 V% }+ j9 j modelSchedule.at$createAction (0, modelActions);) `. W: E5 A& D
9 m* M+ U* ]/ R2 m. |( _7 U! V& r
return this;1 z# B& q9 O0 o1 M; t8 D" T
} |