HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 W, Z2 q: Z8 j5 I* M: a7 k8 s7 S& _
3 u G/ n; _# D7 J public Object buildActions () {, M7 Z/ ^+ P2 ^
super.buildActions();
# R4 f4 V; B, G4 d9 Y1 ^+ x
' h! `9 y6 U |% p% q // Create the list of simulation actions. We put these in
- t/ G8 q* ]; V/ K8 U* l- I! p // an action group, because we want these actions to be
% W3 Y4 }: s4 l) L$ G0 V: V! s8 t8 f // executed in a specific order, but these steps should
; r* o/ B0 I, n0 o1 V // take no (simulated) time. The M(foo) means "The message- c! D: B1 M* P* i/ p/ p
// called <foo>". You can send a message To a particular
# i! k0 s, `, V1 o: B& O7 I, @ E // object, or ForEach object in a collection.
, ]* u' @) _* j: z H& N 0 b X. N: ]/ G X) o
// Note we update the heatspace in two phases: first run
6 Y; a! s/ r& ?. Y* { // diffusion, then run "updateWorld" to actually enact the4 Q. C E# _; o2 Z% T
// changes the heatbugs have made. The ordering here is
2 E6 x. `$ z9 ~' A5 e7 ? P- L // significant!8 N6 `+ j5 `" x1 |) }, i6 V
( f. Q4 W2 y0 t. B8 Z
// Note also, that with the additional
* T0 S( M& h+ Q o& f; g& @+ C // `randomizeHeatbugUpdateOrder' Boolean flag we can
( {+ r2 H% L0 j3 o/ ~, C6 R // randomize the order in which the bugs actually run/ l2 L8 Q$ j& p+ O+ e# {) Y$ {
// their step rule. This has the effect of removing any
! W N- s! n9 C I4 U' R8 K // systematic bias in the iteration throught the heatbug# W' B6 e. S; q# c- h: y0 [% _
// list from timestep to timestep
* W0 v. a; ?& A
. q% R' v0 F1 t! E) i& D // By default, all `createActionForEach' modelActions have
C/ @2 `7 U3 h, U, @, L // a default order of `Sequential', which means that the6 m2 }) j. ~. B7 N4 B
// order of iteration through the `heatbugList' will be
! N: o* {" V- @4 F9 C // identical (assuming the list order is not changed' U+ S6 d1 i$ E
// indirectly by some other process).0 p6 L/ p: P2 V% N3 F, ]" M
% O( M6 E5 t2 O/ A0 G
modelActions = new ActionGroupImpl (getZone ());
# i/ T. C6 H3 d& {3 }" z: w8 p" u! C1 e6 @% ?* G7 C
try {
9 C* P3 `" R0 z9 A+ r modelActions.createActionTo$message( k2 x( |8 _8 j& g3 X
(heat, new Selector (heat.getClass (), "stepRule", false));
; }) ^0 B# A! [3 B } catch (Exception e) {. u/ q- k. ]: `& [9 Y
System.err.println ("Exception stepRule: " + e.getMessage ());
/ S# i1 K8 H* e5 Q# h* M! V }
6 q w/ F: s$ W# S" h
* P6 Y. y: p w try {& H% v( p1 q) v! H4 q
Heatbug proto = (Heatbug) heatbugList.get (0);
# z2 u, d. ~4 t0 n2 { Selector sel = 4 k2 R: I& ?% S" ^
new Selector (proto.getClass (), "heatbugStep", false);+ O) @6 [( ?3 `9 Z% |* Y' z3 J, z, Z
actionForEach =0 M7 S; P( P5 {1 ?
modelActions.createFActionForEachHomogeneous$call
$ P. S/ n& q- a3 I' Q (heatbugList,
% _7 s8 e5 v. z2 c% @& t6 n$ Z2 t new FCallImpl (this, proto, sel,8 O* C% q; P- D- J$ `$ n* `
new FArgumentsImpl (this, sel)));0 U, W/ T# `! v; x8 j
} catch (Exception e) {+ f, t) N8 |& o. s k/ _
e.printStackTrace (System.err);2 j; x# ^/ s% S( R
}. o) L1 h" r. U1 Q1 X5 {" I
+ ?- G2 p) d9 i; c3 W. d4 z syncUpdateOrder ();2 L( N: T: ]: R5 |: m8 H, [0 v& T$ b
; C" _0 X! f" C: f
try {
0 n' W+ a4 ^8 \4 \ modelActions.createActionTo$message ' J) Q$ A* L; u f
(heat, new Selector (heat.getClass (), "updateLattice", false));
& s( I# h4 ^# F& W3 c3 Y } catch (Exception e) {
7 t* ~' X9 _3 k5 T3 h" i0 o! G l System.err.println("Exception updateLattice: " + e.getMessage ());
: S6 @. ? [8 L+ L }
. @1 M2 q* Q- f+ o7 p( F/ Q$ t$ J $ T4 Z ?1 x( I* N
// Then we create a schedule that executes the. L' M. R( p0 S; j$ ]
// modelActions. modelActions is an ActionGroup, by itself it
$ t, U( M d7 ]4 g: ~) D* ]( J# ^# _, Y // has no notion of time. In order to have it executed in
! M% G7 p6 l; ~% j2 @' a6 x1 ~6 x, h // time, we create a Schedule that says to use the
: L! i0 z8 h& ?" e. l7 C" l$ { // modelActions ActionGroup at particular times. This
: [5 x C0 d( N o( B // schedule has a repeat interval of 1, it will loop every
: |: a0 H9 t% Y' m0 O7 o: C // time step. The action is executed at time 0 relative to' ~- L( ?8 v4 B$ Q* j
// the beginning of the loop.: ?( D$ @2 \. y/ ~# }) A; I2 \
6 {2 r# c9 X& n( h {/ N: c
// This is a simple schedule, with only one action that is( O5 B) z! R% }+ z. B9 ~
// just repeated every time. See jmousetrap for more
* K J: e* S; _ // complicated schedules.
, d) e" n* L9 t/ D, @8 Z 0 f+ I! I* D" @6 q
modelSchedule = new ScheduleImpl (getZone (), 1);; Q7 a* E2 ^4 Z4 p5 t5 D% Q& V
modelSchedule.at$createAction (0, modelActions); v/ a' h4 g8 j! n- [
/ k$ l* A) q+ ^/ _ return this;* c) T$ H' @4 O; x
} |