HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, s5 i- M; e# S$ B
2 J% r8 r7 f X: ]$ P) y
public Object buildActions () {2 i) P) }: A+ J3 }
super.buildActions();* n7 {" [" S% W' {3 f. B% d* O4 ~8 X
: n. X+ k/ j) A; R
// Create the list of simulation actions. We put these in
9 q$ I* R! N6 u4 o7 e // an action group, because we want these actions to be7 }+ J1 e% B; G- A0 g9 L4 u
// executed in a specific order, but these steps should) l4 o9 ]3 \) p. c
// take no (simulated) time. The M(foo) means "The message0 s( E/ C/ T; O M1 h W% a! ~
// called <foo>". You can send a message To a particular9 Q1 H8 S0 [% b9 q6 q, ~* e
// object, or ForEach object in a collection.
. u0 T' K1 X+ z/ u 6 j+ }+ D1 O" w, L# m2 k! o+ @
// Note we update the heatspace in two phases: first run8 C+ g/ M% [3 {7 v& a
// diffusion, then run "updateWorld" to actually enact the
+ r* z1 d1 Q1 P" ] // changes the heatbugs have made. The ordering here is* Y' a; o- I: O' J
// significant!
4 @' n. ^' `; \8 W, H/ a
3 A/ W% x& N2 U% U; N // Note also, that with the additional5 c4 J$ ^! F& M( Z, {8 t6 P4 m
// `randomizeHeatbugUpdateOrder' Boolean flag we can
/ @: D/ N8 }% L+ d( c9 a // randomize the order in which the bugs actually run% X$ f: p, B% z+ \; g' r( T
// their step rule. This has the effect of removing any4 F* w) Q" G. }! ^. r4 s! i8 P+ {
// systematic bias in the iteration throught the heatbug1 F0 O+ a# \6 g7 e: n, E0 R8 H
// list from timestep to timestep
1 l" }+ M8 Y1 ]5 U/ g- p) b
+ W9 i8 n$ n* R8 l3 C5 o // By default, all `createActionForEach' modelActions have( _1 _3 ~: t6 M X
// a default order of `Sequential', which means that the
6 a8 K0 p. t9 f // order of iteration through the `heatbugList' will be; K$ t7 a1 u' f* c$ b
// identical (assuming the list order is not changed
/ D, i' ?& s# h) R/ m // indirectly by some other process).( ]8 O* _! I* s D" N
2 |+ y5 _8 l1 s% y0 V modelActions = new ActionGroupImpl (getZone ());1 ]$ V" K! k5 X9 B
9 O7 k# h' H9 i* x
try {
/ `6 [1 X' |3 L! {/ T! U& d modelActions.createActionTo$message
, E, E# `7 A! G3 B: C (heat, new Selector (heat.getClass (), "stepRule", false));
4 m/ R+ |0 W+ I D" u! O% ~: v } catch (Exception e) {
: t# J5 d& A- f8 o% V" Q System.err.println ("Exception stepRule: " + e.getMessage ());
. i. ^5 C5 X+ Y8 }6 ]; h. `+ T( e6 X }' \5 M4 t! F; }1 g, c, w8 P4 t
& X& b% S. D0 v5 a. { try {! _ r1 a3 m6 t" R7 ~( Q' B
Heatbug proto = (Heatbug) heatbugList.get (0);
. `! M6 N, B/ S5 Y) |7 J Selector sel =
; Y c9 T1 A3 A% r5 \2 U new Selector (proto.getClass (), "heatbugStep", false);
9 K V4 h" ]4 K9 c actionForEach =
6 J- Z; g# [& R: S# @ modelActions.createFActionForEachHomogeneous$call
4 l. ^8 B8 a4 ] (heatbugList,$ p+ a% d, Y$ w# {9 |
new FCallImpl (this, proto, sel,- F( u2 h* H1 r" |. `" _
new FArgumentsImpl (this, sel)));
2 X2 t s$ T7 o- | } catch (Exception e) {
6 t' N; ^6 r( A- x) T, D e.printStackTrace (System.err);3 m, k5 P3 l8 Y: z$ N
}+ Q# c; N7 A" h( z) e! j
* x! d6 l6 o+ B2 I" N syncUpdateOrder ();7 q+ ?- S8 V8 s5 `% B* ^' m' U
% n# x+ n B% b try {/ Z! v" L% M, z3 {! x; n
modelActions.createActionTo$message
4 F4 T \ d2 O8 p! Y% B# e (heat, new Selector (heat.getClass (), "updateLattice", false));2 Y* o4 s& {% t# `2 s P' B
} catch (Exception e) {
/ n+ F( ?- |! M- J& d* X9 {$ o System.err.println("Exception updateLattice: " + e.getMessage ());/ z/ T( c5 n; M+ n7 k5 w' ?
}- j, A) s3 @, h2 j9 l' s& G
! U0 r- `7 i! h/ q
// Then we create a schedule that executes the
2 s$ d6 c- G" S8 g. S# q // modelActions. modelActions is an ActionGroup, by itself it% M" r6 t; }1 A; w
// has no notion of time. In order to have it executed in
6 K$ O! Z2 v& w3 ^ // time, we create a Schedule that says to use the
R, k/ q) N6 M8 `- P, G // modelActions ActionGroup at particular times. This
' k l/ K; `- y // schedule has a repeat interval of 1, it will loop every
$ }. r: ?! {6 S$ B4 v9 s7 S4 {) \ // time step. The action is executed at time 0 relative to2 s+ l0 f0 F) t) n7 B! c# s4 X- Y
// the beginning of the loop.) y3 S, N6 C3 P
/ X) k# y& R9 h // This is a simple schedule, with only one action that is7 G2 [7 A% R% c/ ]8 c+ V k
// just repeated every time. See jmousetrap for more
" I# B- |! Z/ \" Z9 I! C // complicated schedules., c' d- l. C$ J& G: E& r& f' [8 j
$ h' r, f: B3 M( Y; } modelSchedule = new ScheduleImpl (getZone (), 1);
6 D$ E& X8 \& k$ @# s, H& q0 P modelSchedule.at$createAction (0, modelActions);
% ]+ r) }: q' h& z / h, ]- M! @" m
return this;. M0 @& A: s) C& N
} |