HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 S/ r+ }. X* Y
" ]; E# h/ e* }; L
public Object buildActions () {
9 q4 H/ ]. g; F: N7 y& E super.buildActions();. g! y, b9 v- G
" w. ^$ d! d6 ?( a, g6 i7 L // Create the list of simulation actions. We put these in& @9 }: ?. b- k9 x
// an action group, because we want these actions to be
# e. ^" D5 x) P2 o% W0 O // executed in a specific order, but these steps should
6 P! z& `5 Y; k // take no (simulated) time. The M(foo) means "The message5 Q! Q+ C/ k! T4 T, C
// called <foo>". You can send a message To a particular
9 W! n2 ?6 D* h6 ]6 c1 V* @; y // object, or ForEach object in a collection.) M7 O6 C6 K: v; Z
; n% |+ u' ] |# m# j$ J' A
// Note we update the heatspace in two phases: first run
5 n5 K' ~) g& S4 C% I, f$ m; I // diffusion, then run "updateWorld" to actually enact the
3 A' X' X9 Z% V5 m% U( t+ F // changes the heatbugs have made. The ordering here is
, q x. u. y) ~ // significant!: m' C# A! x7 ~# C* {+ | v b
$ e- w1 K& ]: ?- g; ~ // Note also, that with the additional
! V, `: w* u, a) y // `randomizeHeatbugUpdateOrder' Boolean flag we can* x6 `; u `7 }& g% I
// randomize the order in which the bugs actually run9 C) Z4 A1 p" d2 c
// their step rule. This has the effect of removing any) f; M- W9 B4 d! Y ]3 h
// systematic bias in the iteration throught the heatbug
# Y4 x3 r9 }4 M2 [9 N9 ~/ W // list from timestep to timestep
: _+ A* q2 L9 b( [8 H
" q! V4 u8 t/ T // By default, all `createActionForEach' modelActions have5 S/ O# q% b3 S0 L7 E1 M4 V/ I
// a default order of `Sequential', which means that the
7 Q M* e4 T' F8 s7 e7 `4 R& c6 p // order of iteration through the `heatbugList' will be
* T. e& t# w w! x$ j+ o" n8 A5 A3 |; U // identical (assuming the list order is not changed
. ?. E+ x2 @9 C8 x0 m // indirectly by some other process).
- L% V6 u' @. U8 B8 w I9 Z% b8 x
; B3 }- D: G, a9 N% l modelActions = new ActionGroupImpl (getZone ());8 }$ c. c4 E/ | i. z
1 d3 Z3 i- o! Y& n9 ^' j
try {: ^1 b k; a$ T5 D' u1 S4 e. w
modelActions.createActionTo$message& @4 H9 F; _% c! f f, Q3 ]
(heat, new Selector (heat.getClass (), "stepRule", false));
& ~4 }! c. ` G } catch (Exception e) {1 N, [+ |. ]+ n. X
System.err.println ("Exception stepRule: " + e.getMessage ());, [/ N' {% z1 q2 o
}9 f0 ~( I' ]2 p1 }3 f
* w1 }1 X6 ~/ h5 P
try {
1 } a" [% s G2 t! m0 R! a Heatbug proto = (Heatbug) heatbugList.get (0);
- @- P$ Q2 m, {& [+ P/ D% a Selector sel = % L0 v' H- l2 U6 ]1 D6 j' o8 A; ?8 |
new Selector (proto.getClass (), "heatbugStep", false);
. B* i$ ~0 {* k4 h. r6 c actionForEach =- E9 d$ ]$ K2 f, t9 k* i
modelActions.createFActionForEachHomogeneous$call
" ]+ V2 j4 A: K9 a: c) W; Y (heatbugList,
! q. G. ~) \9 M# k: j9 H new FCallImpl (this, proto, sel,
9 K4 r5 U( v: p. ] new FArgumentsImpl (this, sel)));
, t3 X0 k3 j' E } catch (Exception e) {9 T6 S9 ^/ A3 E1 y* R6 i
e.printStackTrace (System.err);
8 |1 k T$ M9 ^9 H7 S }
. V2 Q' {8 y& d/ m
' x7 A, R$ o. r0 l5 c syncUpdateOrder ();
; u. g8 g2 R& m3 l% e3 a! \; y+ _( E6 M' x: u0 D
try {: E, ]5 ~- }# i! r
modelActions.createActionTo$message 7 r) C: v7 t6 ~+ I
(heat, new Selector (heat.getClass (), "updateLattice", false));
2 H8 o6 Z i" M/ y, V+ x, t } catch (Exception e) {; ]4 K. I$ P) V: V% O
System.err.println("Exception updateLattice: " + e.getMessage ());5 V7 J% j* P& `) a8 a
}: ?6 J& E& O) L4 y; q! }( i" ]
% t# C( O7 Z% J4 K+ ]6 b4 ] // Then we create a schedule that executes the
+ Y8 F5 `! w/ X1 F( A // modelActions. modelActions is an ActionGroup, by itself it; @% X7 e/ L- b
// has no notion of time. In order to have it executed in) W3 N7 C, p2 R2 v
// time, we create a Schedule that says to use the
7 }$ Q9 t* r2 z // modelActions ActionGroup at particular times. This
: p& Q2 x t, {9 I# T: t+ ?; ^5 K // schedule has a repeat interval of 1, it will loop every+ Y' M8 Z$ B z/ `* u& i( P
// time step. The action is executed at time 0 relative to
0 ?4 \/ U6 g$ w$ x/ R // the beginning of the loop.
& [# g, X2 }8 f( [8 [# [, [3 U W! [& C. q7 g' c
// This is a simple schedule, with only one action that is a8 y- }/ z {5 x
// just repeated every time. See jmousetrap for more
$ K3 R( {$ w4 \1 \8 `5 S; A // complicated schedules.
/ P: ?* z- c1 n* S' s3 y1 |
9 k! l( k0 y- S8 @4 w modelSchedule = new ScheduleImpl (getZone (), 1);
; c2 p; j0 u* y0 K modelSchedule.at$createAction (0, modelActions);! V/ @1 W4 H6 V3 \& x
9 c# G) S8 R& T& v% x( ]* R
return this;. G1 D) F( T ~
} |