HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 Z* {( g: ]% E
% C+ |; ^/ z$ ]8 o1 Z R. F0 u public Object buildActions () {- }' u4 C; W# \8 u9 `
super.buildActions();
' L' e1 F! d. N% e 3 C% o% u3 n! M
// Create the list of simulation actions. We put these in3 V. [. J' i1 N
// an action group, because we want these actions to be
5 a5 e6 l8 g$ S, T0 A/ T // executed in a specific order, but these steps should4 L: Z% c" y0 a [7 u9 I
// take no (simulated) time. The M(foo) means "The message
V* o+ T9 `1 N9 @& o% g8 b& V // called <foo>". You can send a message To a particular
" q6 b# B* H2 C5 _7 Z // object, or ForEach object in a collection. p1 R! J' o2 t
4 N V H1 O5 w+ F
// Note we update the heatspace in two phases: first run
$ M8 l0 X3 x( b+ y6 x% R2 \ // diffusion, then run "updateWorld" to actually enact the
* ^# J4 @9 G; O4 q // changes the heatbugs have made. The ordering here is
! G( h# V& A' j: x* V2 l& U6 A // significant!+ M- r9 R* w5 F7 v2 Z* @+ X% M
- n# P, N, z0 k! A, n // Note also, that with the additional
# m3 g$ d/ i7 Y" c$ U2 g0 h7 s // `randomizeHeatbugUpdateOrder' Boolean flag we can
' e5 F+ d o3 ?) _) \ // randomize the order in which the bugs actually run
' y3 |. j- J1 Z- {2 B$ @" f // their step rule. This has the effect of removing any
! O' ]0 a' m2 S; z6 d( J, u( i // systematic bias in the iteration throught the heatbug8 B/ e! y% O0 U Q0 k2 O x/ [. V
// list from timestep to timestep
3 R) n% b0 A5 ~ + U+ O$ ]2 s7 F1 g8 u8 y& [7 }
// By default, all `createActionForEach' modelActions have
3 `' D6 L0 W# @! v4 j // a default order of `Sequential', which means that the
% l; X+ N/ R7 D, Y# I k, I // order of iteration through the `heatbugList' will be: x2 f' N$ L9 |% u
// identical (assuming the list order is not changed6 @4 b' x9 _7 w4 x: s4 z, }
// indirectly by some other process).
; y8 Z$ A- q7 N- d. W+ s( z7 X' t
4 e6 Z' ?( E$ R4 H. m- ~* W4 U modelActions = new ActionGroupImpl (getZone ());2 p% x. `) x0 d# l2 Z# q
! |3 V5 S" D& g
try {
4 X0 Q- u! c4 \. z0 U modelActions.createActionTo$message# }0 D: }; r2 B3 t0 M
(heat, new Selector (heat.getClass (), "stepRule", false));
7 o; {$ j: M" n } catch (Exception e) {
% |4 g2 ~* F" w+ @- _! Y$ t: i System.err.println ("Exception stepRule: " + e.getMessage ());
& m2 u1 }; _6 C) [+ n }$ d; b, D9 Q7 Q" x% V2 B D+ H* |/ l
L. D+ P; }3 M- {) K. J
try {& |1 H( D' I% A$ ~
Heatbug proto = (Heatbug) heatbugList.get (0);. x, Q A @* d- Y" q5 j) R* x
Selector sel = % `! {7 x( M: L
new Selector (proto.getClass (), "heatbugStep", false);
4 Y) v/ g2 \9 {6 [, x6 A actionForEach =
* \/ t* f9 A& v0 ` modelActions.createFActionForEachHomogeneous$call3 R4 _( V8 o- U5 `
(heatbugList,
: J6 W7 b) X1 J+ E# K7 Q! F new FCallImpl (this, proto, sel,8 \. i( w3 i3 e; |) @2 ^$ `* \1 X
new FArgumentsImpl (this, sel)));
7 B: C4 s \8 Q( C& T } catch (Exception e) {; h8 u( z' D4 _! T+ |! m
e.printStackTrace (System.err);
+ E0 A% R/ _' G# j) B4 w }) ]2 l' S/ l6 B3 P9 R4 \, `" ]: O; j
" v X" p; r8 J& z1 G+ y
syncUpdateOrder ();. v6 F4 i" |& v# e4 d/ k
. l6 E* l8 R: l1 F
try {! |* b9 {7 L7 n0 g( _. F7 U
modelActions.createActionTo$message
; [( n$ E' w9 k# _% V7 K (heat, new Selector (heat.getClass (), "updateLattice", false));, A3 D1 N) h+ g# H
} catch (Exception e) {! u- {. _( i- L9 V1 o
System.err.println("Exception updateLattice: " + e.getMessage ());6 M+ x' T) `( h9 ]! F5 S' D
}2 q; S. m3 T, o7 k* n V
- N: i& e: x9 f5 Q$ V& d( n
// Then we create a schedule that executes the
) T2 d/ Q, G0 l. }- m // modelActions. modelActions is an ActionGroup, by itself it& f6 H! I5 `8 q }6 _9 d, d5 p
// has no notion of time. In order to have it executed in* i8 e# g. r4 y/ ^! T4 f; \' N& \0 G; N# ~( y
// time, we create a Schedule that says to use the
* ]. C% f8 S- X% q% ~6 Y |5 p // modelActions ActionGroup at particular times. This( `+ ?9 s+ o; K8 ^6 i Q
// schedule has a repeat interval of 1, it will loop every
3 P7 ^) D& W% v, |% H+ e // time step. The action is executed at time 0 relative to; j! Z2 t5 N, c, U0 i. F( z
// the beginning of the loop.
1 V9 T* c. Z; | p2 g& }/ G; w" l( k) P/ g) z
// This is a simple schedule, with only one action that is
. c8 _+ l( I' X( |' e' h: P // just repeated every time. See jmousetrap for more& d- L# | d J7 v
// complicated schedules.# w" v% A6 s/ N
1 P0 t+ w: K D4 Z% H9 E
modelSchedule = new ScheduleImpl (getZone (), 1);3 w: N1 H! L0 m T
modelSchedule.at$createAction (0, modelActions);6 t, _' n. y& m; A" c' i6 h9 f
$ q: y7 G; Z! f; b
return this;
+ X' ~3 R' t9 u5 z } |