HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
x+ z# N( [# O" h' x+ g8 H% a5 V: R8 B7 P9 @ c
public Object buildActions () {
6 ?. E( f6 X3 |7 L9 F super.buildActions();
* N" F* S2 x. X2 g5 X# K7 [ $ s+ g& `5 O/ W* A' O
// Create the list of simulation actions. We put these in
6 W- a: k- u7 B/ V$ s/ _( b // an action group, because we want these actions to be
b( e0 v- L( n i3 c* ~% f& v( L // executed in a specific order, but these steps should: ?2 W) D6 Y8 F7 @, }3 `
// take no (simulated) time. The M(foo) means "The message
! c, J- Y; I- | // called <foo>". You can send a message To a particular
6 X7 m! l* e8 @7 Q // object, or ForEach object in a collection.2 A: Z1 r8 d k" n0 @3 h
0 ~3 n. |3 D* N$ T0 P // Note we update the heatspace in two phases: first run8 \( D7 A' h6 h
// diffusion, then run "updateWorld" to actually enact the; c4 S0 }4 b, v) j7 E2 w3 e
// changes the heatbugs have made. The ordering here is/ q! ?# V; K5 x- Y/ x3 [6 W
// significant!
) |) ^8 R6 y5 u) I% n4 f. i9 e) d ( |. ~; R5 _* o2 N u' \3 f+ d" S. A
// Note also, that with the additional
- P9 X+ [2 G9 \7 S5 L8 j1 F // `randomizeHeatbugUpdateOrder' Boolean flag we can% i" R. M3 ^9 U( ]
// randomize the order in which the bugs actually run
( y# i e2 z" e2 h) Y% C# z/ f // their step rule. This has the effect of removing any0 x! |) w+ B+ v6 o
// systematic bias in the iteration throught the heatbug
9 M% n& q% s- n. p$ {( S2 ~ // list from timestep to timestep
2 j7 g9 T9 w* @. r( u : I4 c" Q/ ]3 f+ m3 u7 g7 p7 `9 U
// By default, all `createActionForEach' modelActions have
: X0 a( P: {& ^/ L: A, i M // a default order of `Sequential', which means that the
6 G# F0 A/ P/ m5 T" h // order of iteration through the `heatbugList' will be
: u$ v1 V" @% {' P! @% H) B1 x a/ r // identical (assuming the list order is not changed
: g; h9 m3 i0 D% F* a3 Q( p // indirectly by some other process).
0 C1 u# ]7 H) p1 K) m: V; v% ^
/ C8 P9 S# X! O9 l9 x" A3 t# [ modelActions = new ActionGroupImpl (getZone ());, {' N" m- ]0 ^; f/ A; @, E& A
; S, A8 \% Y" _+ Z
try {
5 }. p& Q3 b) d v- F4 C; Y modelActions.createActionTo$message
0 R: T# t3 x3 I2 p7 C6 ?$ C (heat, new Selector (heat.getClass (), "stepRule", false));
9 q# k& F( S3 M } catch (Exception e) {
$ Q. J% R/ u. }- M4 P; M System.err.println ("Exception stepRule: " + e.getMessage ());' M( C9 W8 D& r1 O7 X
}: I9 S) m% X7 g
5 ^) x; r' C- L! C* M+ b try {
8 i; C5 @8 ~- f4 o+ \ Heatbug proto = (Heatbug) heatbugList.get (0);
# r( s( T4 e' G# C8 o9 N5 { Selector sel = ( v0 g9 w: w5 } h2 l1 g2 N3 \
new Selector (proto.getClass (), "heatbugStep", false);
/ j* [8 E- t/ t actionForEach =3 o; ?8 J( Y6 W& a8 o, r
modelActions.createFActionForEachHomogeneous$call8 W" r) c1 D9 j4 {
(heatbugList,/ _' P4 |" h. @ }
new FCallImpl (this, proto, sel,
! ?$ y2 v# O: C; o3 b1 b new FArgumentsImpl (this, sel)));3 l/ j% ] O" V) e
} catch (Exception e) {
9 J: ]- m2 a; L e.printStackTrace (System.err);: d2 Y( b) z t
}
% }. A+ h- D5 I- z
+ c6 A, Z# W+ f# W ]" p syncUpdateOrder ();+ j- {) K* f' k! b# ?- K- |& E
7 |; X" t4 e, }# T7 a try {
. M. K4 N k4 L3 F2 q modelActions.createActionTo$message % C8 g- O% O& h$ Q& |, F
(heat, new Selector (heat.getClass (), "updateLattice", false));
- m$ `2 D! x$ D: `( r4 `. E! B } catch (Exception e) {# n+ V. Z- a" k* [
System.err.println("Exception updateLattice: " + e.getMessage ());
7 Y+ P+ b7 F# y" }# H% u- E }
) V5 ^) u2 U' x5 n
5 K$ z+ s- C$ I, |) q* S5 s7 C8 o // Then we create a schedule that executes the! D# C9 }% o; k
// modelActions. modelActions is an ActionGroup, by itself it# A& [9 D0 M# K) U& |2 e% W
// has no notion of time. In order to have it executed in. C5 w% D' ]5 r; y& h' E
// time, we create a Schedule that says to use the
( n# A: A. k x( W4 ? // modelActions ActionGroup at particular times. This
" H0 L7 ]& T0 I9 f5 ~ // schedule has a repeat interval of 1, it will loop every
( h3 ]3 G" O; @2 Q* p$ |4 i2 L9 A // time step. The action is executed at time 0 relative to
$ I% [ L$ j, V2 R4 @7 } // the beginning of the loop.
/ j, C+ o% T& x1 a4 X2 _ v7 A: q: Z0 Z
// This is a simple schedule, with only one action that is& I! k+ }& k/ u2 O: z
// just repeated every time. See jmousetrap for more# L% X$ u: \7 W* [; F! Q: U
// complicated schedules.6 t. m" _ ]: v: }/ f9 P+ L: `
9 t8 Q2 B. @8 h4 s: V modelSchedule = new ScheduleImpl (getZone (), 1);
' v& I2 s; l! h/ ~- Z) p modelSchedule.at$createAction (0, modelActions);
$ @( L0 J$ D5 v3 v : p! u; M; z' i' x( U+ t2 m4 I
return this;5 i! e+ l" m& B' l
} |