HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ M, w! N7 g- L2 j% B, P" ]/ U# k7 G, w G e! o3 D0 s5 V: \% L
public Object buildActions () {$ S5 a$ y+ X9 ?- n+ z
super.buildActions();
, ~: i* M) L, Y8 ]' x% B1 s - k& D/ m/ x, k V- K$ a
// Create the list of simulation actions. We put these in
5 I' q" n+ }) P3 K8 }- x // an action group, because we want these actions to be$ D; k( C4 A" l. m& c1 h' a& L
// executed in a specific order, but these steps should9 |& G9 @3 o2 V- ?8 ?. E
// take no (simulated) time. The M(foo) means "The message F8 y! s7 B5 J" K8 \6 j: _
// called <foo>". You can send a message To a particular
1 ?$ n% Q, Z: Q5 i7 ^! c2 G // object, or ForEach object in a collection.
2 Z4 N2 o! A! ^7 F" n6 x1 Z
: ~ D' C" T" c1 O% P // Note we update the heatspace in two phases: first run
6 V. _# q/ ~( r // diffusion, then run "updateWorld" to actually enact the) ? Z0 j7 E- u1 G6 V. S
// changes the heatbugs have made. The ordering here is
& p1 K* j6 j" x% I+ ^ // significant!$ T; e: t5 |# k- D Y) C" {5 U7 u
. k1 Y+ Q- ^& p$ G5 `; z! n
// Note also, that with the additional) [4 E$ q; _1 f- `' G3 w+ K
// `randomizeHeatbugUpdateOrder' Boolean flag we can5 p3 B2 {: n( b1 b, H* w4 p
// randomize the order in which the bugs actually run
8 t& V& S: B: Q) `" z; Y. L // their step rule. This has the effect of removing any8 G+ b1 k0 c7 J: z% J p* L; E
// systematic bias in the iteration throught the heatbug
' x) E7 ~7 a6 E+ g9 B // list from timestep to timestep, ?8 x+ H5 `; Y" s
5 e- g- x# x9 k // By default, all `createActionForEach' modelActions have
' T2 \# _7 ], m // a default order of `Sequential', which means that the
& h0 S7 _& h9 G- I$ W // order of iteration through the `heatbugList' will be+ `% r" u* Q: A
// identical (assuming the list order is not changed6 G8 j t" A' Q+ m
// indirectly by some other process).- |. Q% [; M. c2 E0 ^
& ?/ O! i; c- ` X modelActions = new ActionGroupImpl (getZone ());5 {, l: {( n! B5 l. N- Q% z6 \
1 j# h1 @% x( \4 C3 K7 {9 J' ]
try {# ?( m9 c4 ^5 @8 g X. I k+ v
modelActions.createActionTo$message
1 M+ G8 g1 M" ~' ~8 { (heat, new Selector (heat.getClass (), "stepRule", false));
e% K8 C$ \8 n V } catch (Exception e) {" W. R; x0 `/ B0 V
System.err.println ("Exception stepRule: " + e.getMessage ());
3 O9 s! E. V# m* Q+ }: m/ ] }/ E; Q+ L6 D* V# L6 e
: E5 n, H9 g" i( N+ y8 p
try {# o% h1 m) @% B, i# g/ m4 b
Heatbug proto = (Heatbug) heatbugList.get (0);
. A* ], M/ T( B# b4 }: c Selector sel = / b0 g$ a8 a/ Z
new Selector (proto.getClass (), "heatbugStep", false); e! h9 x, c1 _/ E3 z
actionForEach =- c. O- A; C4 L. |. K: Q% D; `2 K% s
modelActions.createFActionForEachHomogeneous$call) F0 o1 Z& f4 [7 F" Z
(heatbugList,+ S/ S: u0 k- q4 y: s, L
new FCallImpl (this, proto, sel,
) \ f, s: k7 O8 @& P new FArgumentsImpl (this, sel)));; `+ k/ A g, T" y# e& t
} catch (Exception e) {/ T3 ~' q$ a) j) N! I
e.printStackTrace (System.err);; R: K' k- U# C" j
}
7 C- j& T- z' J% y* t
7 E, c, ~# K. g/ R5 U8 U2 F; i syncUpdateOrder ();$ Q& b. Q$ p# E- m2 p% y9 x. p
% r& ]; }( X$ O" t& c* q7 ^
try {% b; Z% k' `! |9 L5 c
modelActions.createActionTo$message 3 `- {" P$ z! z
(heat, new Selector (heat.getClass (), "updateLattice", false));
: i6 x% j5 s% z" M } catch (Exception e) {
/ z! y# H, A$ p: ^, x System.err.println("Exception updateLattice: " + e.getMessage ());3 L+ j1 i4 i; y& [. o9 @
}
0 C [6 `3 @/ D# K: e2 M 1 a- h8 S- q. C9 x7 K
// Then we create a schedule that executes the
$ E& |1 i' t% B( M, L2 {4 v; O$ @ // modelActions. modelActions is an ActionGroup, by itself it i t7 H/ M& B" {; g. O
// has no notion of time. In order to have it executed in
" n* X. ~, W ~1 R8 a // time, we create a Schedule that says to use the7 |9 D5 A6 s' X4 E4 d2 B6 Z
// modelActions ActionGroup at particular times. This1 l- h7 s5 R; S' n9 X, I/ O# S9 P
// schedule has a repeat interval of 1, it will loop every, D% E9 p7 n4 z, B8 [/ w
// time step. The action is executed at time 0 relative to5 |* [1 n2 @9 E! G% E; t
// the beginning of the loop.1 j5 U A, _/ C7 _3 r! \3 w: F
1 O/ q9 w# u1 {" k; A. p% [% u: | // This is a simple schedule, with only one action that is, r! d5 H' |& D3 M
// just repeated every time. See jmousetrap for more. `9 |2 A9 |% y3 ^
// complicated schedules.
, F5 C) f" M- J$ \) T q7 k 9 I) l) `$ f3 D& Z; C& N
modelSchedule = new ScheduleImpl (getZone (), 1);
( ^3 Z( m! }7 d+ i" e modelSchedule.at$createAction (0, modelActions);
; Q# E! m; w2 I1 Y# ^
6 U+ M4 V; B. ]/ `. H, z) Z# c return this; H/ N I- P* g
} |