HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ a% [* ?" r# r. }, i7 J/ o* O" O- {' V
public Object buildActions () {
T1 ~- H6 |) y2 ^ j$ a9 W7 G super.buildActions();
: I/ D% Q) R- m) v J( W
* Z4 y# k1 j$ z) u) q/ i* V // Create the list of simulation actions. We put these in- k1 Z9 p$ w/ H% @+ p
// an action group, because we want these actions to be
( h7 P/ M5 W2 x, S- e( S% h // executed in a specific order, but these steps should v% G2 A3 h/ B! P6 F* X6 O
// take no (simulated) time. The M(foo) means "The message8 P0 P. P- P9 P/ ~$ y) S
// called <foo>". You can send a message To a particular) M. |9 m5 Y& p( g9 Z: i
// object, or ForEach object in a collection.% ?/ b: m5 ]8 O9 D6 n, X6 E2 l
, t# c' w. [3 I0 X7 t8 V // Note we update the heatspace in two phases: first run
0 V7 ?& c8 p+ t' x // diffusion, then run "updateWorld" to actually enact the
4 ^8 R; h/ I0 M9 F/ K) p7 @ // changes the heatbugs have made. The ordering here is( M- @' x) R$ U6 e/ y8 a1 D
// significant!
& l' [* W$ J E4 b
; Q6 X+ B2 ~* K% G; p // Note also, that with the additional
) {3 r. i" r% a0 L // `randomizeHeatbugUpdateOrder' Boolean flag we can
% F, r+ R0 X) ]( n* l& e // randomize the order in which the bugs actually run
6 b7 V1 b; q8 I0 F- @% M% W // their step rule. This has the effect of removing any u# j3 W; b; t! U# u7 [
// systematic bias in the iteration throught the heatbug
8 s" ] N7 O+ Q9 N3 B& I- r // list from timestep to timestep- K( p% S# i( H/ D6 M
: t- J- ~) D- k! P* }6 J% r6 H4 ]
// By default, all `createActionForEach' modelActions have* l) B9 C$ D; d) e3 S
// a default order of `Sequential', which means that the: R W' `2 O# P4 C4 ?; d$ A
// order of iteration through the `heatbugList' will be' y3 b# D* d8 k. D/ l3 _) P
// identical (assuming the list order is not changed
9 ?% j0 P6 b7 C3 H4 ]; h // indirectly by some other process).
8 k. N; v' ^* M' X! N3 \- I
. g X8 W) m2 }4 A$ e modelActions = new ActionGroupImpl (getZone ());
# b% ^6 X9 c; E* p* x/ v& \& I. ^7 X* J3 J
try {
9 {( _& }- t0 p9 X. I6 k7 {/ c modelActions.createActionTo$message! o3 y* h8 D9 _0 d" F0 b
(heat, new Selector (heat.getClass (), "stepRule", false));
( I1 K4 W1 ` ] } catch (Exception e) {
0 Q4 n; E/ I' d! s% j; s; q5 U System.err.println ("Exception stepRule: " + e.getMessage ());
; l3 o1 _4 R; \) V, p }
- U+ N5 S0 c! N6 v; y' e) P/ s0 y( a+ P5 n0 m
try {) c* y! y, M1 P2 H0 P
Heatbug proto = (Heatbug) heatbugList.get (0);& o0 B& K& l$ b% W9 |. }
Selector sel =
3 B% Y# r, k: j1 E new Selector (proto.getClass (), "heatbugStep", false);' H) ], Q! Z7 L; l O4 s
actionForEach =# g0 n* t; J' _) N# K9 Z
modelActions.createFActionForEachHomogeneous$call0 V7 z4 N9 r" a/ q9 o5 D- B
(heatbugList,
* Z! t. c, Q e. Q7 f new FCallImpl (this, proto, sel,1 X; e' p% _1 C
new FArgumentsImpl (this, sel)));
: F; y- W+ y4 a9 u ]! d' [ } catch (Exception e) {9 S& B2 J6 {6 W% Z( z& |6 S) C
e.printStackTrace (System.err);' H- N) `0 J" k4 ^
}% V+ d9 w0 | p* W+ q# P
9 d: j1 c9 N& ^0 z$ y1 v syncUpdateOrder ();0 {- y; L- f. A# H$ a! Z, o
2 b; V+ w* w, f( d. v# I try {6 q# b. i! Q8 ^- S" E$ `
modelActions.createActionTo$message + M U! E! R# U/ J. ^
(heat, new Selector (heat.getClass (), "updateLattice", false));5 t# G9 ]: r2 m; m. y0 u
} catch (Exception e) {
2 q0 i- l- r4 J. ^" l+ e System.err.println("Exception updateLattice: " + e.getMessage ());
" U4 Q; [ D! C9 ~/ ~2 G }, V' u2 K) w1 R d& }5 q
+ x1 m8 K9 J, P" u
// Then we create a schedule that executes the
& E0 a! w% [% Y! z+ n+ {3 F // modelActions. modelActions is an ActionGroup, by itself it
0 l4 Q4 K" e( \0 w! w' f // has no notion of time. In order to have it executed in
+ f8 {! s6 D: ?4 N // time, we create a Schedule that says to use the
; A' G5 K* a9 o5 B( b! r6 b- ~0 R& X // modelActions ActionGroup at particular times. This
9 h. k: {( v& k2 }; m% o // schedule has a repeat interval of 1, it will loop every
4 |- {0 f' ]' L* H3 l3 q // time step. The action is executed at time 0 relative to# z! F* }/ i* X k! `/ S
// the beginning of the loop.
2 Z! _# m! _% v: r7 c1 d: L; Q. ^" v& W$ F, O: U% v
// This is a simple schedule, with only one action that is* S$ }* h" Z4 `# ?6 P
// just repeated every time. See jmousetrap for more5 F6 @0 r: z3 o5 ^7 H: r
// complicated schedules.6 m$ C% l. S; d$ v5 ~
" v3 k4 `, q7 D# E5 v" v+ N6 n5 P
modelSchedule = new ScheduleImpl (getZone (), 1);
) T6 W, ?' S$ G) x5 e; v, ? modelSchedule.at$createAction (0, modelActions);# v% T, y4 `' `; x; A
& B+ M7 e" o* X9 n" d( a5 I
return this;% H; S. H9 o/ K9 n- T% n
} |