HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' `& }( ?/ E) t" u- A$ F1 @/ A
; J1 d' n! h. }4 M( n N2 c) } public Object buildActions () {- H/ |6 w0 e- P- B6 z2 Y
super.buildActions();# \9 ?9 l! h4 B" d! `
7 t& E$ `. \: W3 D1 T; M# h, k @
// Create the list of simulation actions. We put these in1 d- q) G. n9 U& B' n# N
// an action group, because we want these actions to be2 E2 a) i7 r8 J* R) H0 j. I+ i8 f$ g
// executed in a specific order, but these steps should7 J. y$ I0 I! t1 a( }
// take no (simulated) time. The M(foo) means "The message6 K( a5 y% J* W$ u8 e1 X+ q
// called <foo>". You can send a message To a particular
5 J: C8 i, c S8 \4 L // object, or ForEach object in a collection.
& N8 \( Z* }- Y X+ j1 x# v
* ` D! ^ _. O& w2 W% i // Note we update the heatspace in two phases: first run1 N. i$ C, Z: V! W/ {
// diffusion, then run "updateWorld" to actually enact the
' Q. q3 \6 B5 @6 c7 x // changes the heatbugs have made. The ordering here is
, U9 I8 F! Q# L0 H6 j2 x- j // significant!3 ]4 U7 K- Q. P- r+ i
4 Q: |& S( E# K8 L! j# i2 h: s. b5 i // Note also, that with the additional
! r, U( \! T3 ` // `randomizeHeatbugUpdateOrder' Boolean flag we can
$ [6 `+ O) l4 M8 H3 {# A. u" J p // randomize the order in which the bugs actually run8 f K+ G& m% r9 t k0 y; k
// their step rule. This has the effect of removing any# L. O" s) ~9 Z9 {8 f* ]
// systematic bias in the iteration throught the heatbug
3 W, [9 s2 I. f' |! o O9 M. T% ` // list from timestep to timestep
; } V) r3 n) y* M0 l 2 Y9 ~4 y* S4 E$ P F1 }9 d$ j
// By default, all `createActionForEach' modelActions have* y0 y( A* ~+ |7 \: A9 h4 m: b
// a default order of `Sequential', which means that the
% @# e( }0 v# K( H" _7 _ // order of iteration through the `heatbugList' will be
! s7 C# W* {! U // identical (assuming the list order is not changed" v/ _; @/ b1 C. `! U9 h7 w
// indirectly by some other process)./ Q' X8 }6 h, j4 p
2 m$ P$ p! \3 H# \+ r4 _& X modelActions = new ActionGroupImpl (getZone ());+ [. {" v9 e) k0 d9 W) e
! r* R% P/ z: f9 S+ B try {
/ u& X! a# C/ u. O- H7 Y) V modelActions.createActionTo$message. N' s4 r: r: |0 }/ B1 M
(heat, new Selector (heat.getClass (), "stepRule", false));
3 X3 Y3 o% j$ B6 M. c# G' O5 d: c } catch (Exception e) {
9 w, c4 W, v$ [% A: V4 Y! U System.err.println ("Exception stepRule: " + e.getMessage ());
1 l" d' ~3 W2 X, F; J; v: A }
! R- e% S6 f) {7 {) M( T: F4 V! {% q% `' T
try {
' I8 ~8 {4 b9 m' _8 u Heatbug proto = (Heatbug) heatbugList.get (0);. o4 T& N4 m5 k, b
Selector sel =
0 v* k! R7 X# b# E, C new Selector (proto.getClass (), "heatbugStep", false);* m$ y% F- w9 d4 m
actionForEach =: R5 a$ ]2 y5 T; f
modelActions.createFActionForEachHomogeneous$call
/ \. C b% A4 J7 p( K0 D (heatbugList,
' m' k5 N K; w( \% F4 }4 c new FCallImpl (this, proto, sel,1 O4 Z( [1 H* x+ C3 i; t
new FArgumentsImpl (this, sel)));
) i l9 P' q3 R. u- }1 }, }* F0 }% | } catch (Exception e) {
: ] F* U/ @$ ?, r x l2 i: Z) J e.printStackTrace (System.err);* Z% ]; D4 D8 W: Y( T( Y+ A
}
) N9 V$ o2 e0 t8 y& p. \
+ p2 `$ D( j- q- L3 s) k syncUpdateOrder ();
6 f1 g- l1 G# v5 ~
3 z" O/ B) F" [. e1 R7 M+ w% ~ q7 \ try {7 |6 S0 S7 U+ w# X( i, \1 u* @
modelActions.createActionTo$message
4 _' w0 m. ?% P# F( V, ~2 J (heat, new Selector (heat.getClass (), "updateLattice", false));; a8 p; o% @! Y' a% T* R
} catch (Exception e) {5 u+ y, u/ g4 j! R' _2 ^7 k1 b- \
System.err.println("Exception updateLattice: " + e.getMessage ());: ^$ I! E. Y% m s2 Y2 D, N( f0 V# r
}
3 e( S K, O- C: f* J ! G0 n( q5 U; h1 i. R
// Then we create a schedule that executes the; [0 Z5 k% ^: F4 i& \
// modelActions. modelActions is an ActionGroup, by itself it) }5 @# v: @2 ^; Y5 m5 x4 F- o1 {
// has no notion of time. In order to have it executed in
9 K" ?6 `. `/ P7 B$ @ // time, we create a Schedule that says to use the# W, w8 a. P* C4 T( r
// modelActions ActionGroup at particular times. This6 M8 j1 P, u/ u' @
// schedule has a repeat interval of 1, it will loop every
8 g5 E, D& P9 [, x# {" e // time step. The action is executed at time 0 relative to
# x2 @+ g! i: z // the beginning of the loop.
% g8 H+ v" j+ Q, u+ T& G. J6 U2 `/ l0 u9 g6 ~& {
// This is a simple schedule, with only one action that is
2 K( c, ^! [8 W, k- w6 O" l0 I- \ // just repeated every time. See jmousetrap for more
: ~$ B( K) ~8 x7 k // complicated schedules.
! j L" p6 y5 {: w! H" t: S
: h* G- |# L( O$ M4 v# g modelSchedule = new ScheduleImpl (getZone (), 1);
6 h1 |3 j+ D" x8 g0 c! j modelSchedule.at$createAction (0, modelActions);
6 f4 w2 M5 F9 y; d1 o3 j! {
: F F* X* ?6 z, [0 } return this;
7 Q* n8 o% X! [, }8 O Y } |