HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
" g' h, u* f6 q/ C( C/ v4 V1 ^8 `% i. }# j5 @7 D5 Y6 u& } w
public Object buildActions () {9 } m W# R7 K$ L9 v6 y
super.buildActions();
5 d% r M: b' U' ]
Z9 T7 Y2 m& ]$ \ // Create the list of simulation actions. We put these in. u( ~- {) Y# k& |9 X( F
// an action group, because we want these actions to be% p. T ~* f1 T% c( B) P m% s
// executed in a specific order, but these steps should# g$ ~2 f/ p( \) c- Q/ H' M1 X
// take no (simulated) time. The M(foo) means "The message7 T, ]4 k/ q) Z9 X- @
// called <foo>". You can send a message To a particular* I: T) j% z' Y2 B0 R
// object, or ForEach object in a collection.. a; v @5 |. O' s9 Y9 Q
7 v) W" g' L- h+ D* B2 i7 B // Note we update the heatspace in two phases: first run, m0 H/ ]; y6 J! c0 U: @6 E& | w
// diffusion, then run "updateWorld" to actually enact the E! x. |" }7 d2 ^9 a
// changes the heatbugs have made. The ordering here is: j& ?6 l3 [5 m* T8 L1 P8 J$ N
// significant!
& _. ?( V: s9 {9 P# H
0 L0 l7 N) x; ~' \* Y // Note also, that with the additional) L. [# }. y) I U
// `randomizeHeatbugUpdateOrder' Boolean flag we can
0 v& } I; H$ ?2 o8 A& V l7 B // randomize the order in which the bugs actually run2 z8 g5 C- O# b. V$ D# q8 `+ U
// their step rule. This has the effect of removing any
8 F$ p0 j5 a! i // systematic bias in the iteration throught the heatbug' {, s& l4 @9 q# ^' k& T$ u$ k# m
// list from timestep to timestep7 @' S& Z# m- G: Q( w0 R
5 H# ^- |" r# G ]( I5 `! I // By default, all `createActionForEach' modelActions have
2 j9 p2 q% s$ B, A& J // a default order of `Sequential', which means that the
' G$ {$ F9 J; u/ W& z // order of iteration through the `heatbugList' will be1 m+ h5 L% ^( [8 y
// identical (assuming the list order is not changed" m+ S$ S- X' j M* G
// indirectly by some other process).
, Z' [- J1 i }) B; [ 2 C8 X7 W' m; q5 b( W" H
modelActions = new ActionGroupImpl (getZone ());$ F5 p' O6 j. x( D; I8 J$ ~
, i2 g( [4 r8 Z1 C$ v4 C) K try {
" O; j$ \( j( c( m7 v modelActions.createActionTo$message/ F4 k+ g* R, Y7 e' \* F7 u
(heat, new Selector (heat.getClass (), "stepRule", false));
. i/ }5 C2 e: [/ Z' N, i } catch (Exception e) {
+ y5 s/ E Z( c System.err.println ("Exception stepRule: " + e.getMessage ());
2 S+ k4 I! ]1 M& {8 a }
! ~- ]. v6 _9 W- s( A7 {5 C$ L7 Q' { t v2 W1 o4 ^2 |5 j- P
try {
" V+ u3 G5 _8 H) Z; I" t/ k6 `7 P# W% h Heatbug proto = (Heatbug) heatbugList.get (0);$ S$ g" P% _" X9 \. B2 G- ~
Selector sel =
, ^8 y: g3 \- q) a new Selector (proto.getClass (), "heatbugStep", false);
7 s# M e1 ^$ O& i1 j2 } actionForEach =
1 g+ C# w( k! ~ modelActions.createFActionForEachHomogeneous$call
- { s. ~) K, C! p (heatbugList,
4 d# ]$ j) {2 T2 f8 J new FCallImpl (this, proto, sel,
# ^7 U% }$ g) ^$ v% t4 n3 z new FArgumentsImpl (this, sel)));
f. }) ]0 j: t3 c, ?7 {! B3 ^" J } catch (Exception e) {
2 t; U2 W! A! o2 a3 F5 a$ T e.printStackTrace (System.err);* w$ j2 ^2 N! s; ~8 d9 O( E5 h
}6 Q8 _; Y. s+ ^
2 a' s; w2 y/ e3 [. u
syncUpdateOrder ();1 F3 t* a$ y4 |, U: m8 U
, h& `! ?% Q6 r2 G$ W try {
- ]0 ~. X9 N: Y$ I$ o, u0 r# O modelActions.createActionTo$message 4 F! D# [0 @* d0 v9 T/ K0 @
(heat, new Selector (heat.getClass (), "updateLattice", false));
9 R7 U ]; }6 [$ }0 X* P1 P7 Y* T } catch (Exception e) {% f0 [* z7 @; N6 Q+ @8 c, P
System.err.println("Exception updateLattice: " + e.getMessage ());# M# o5 h* r! F1 v2 B
}
8 k1 ]* r) q; X" p! X
! f K O1 t9 y // Then we create a schedule that executes the
5 P* |" e- A$ \- r+ v5 o // modelActions. modelActions is an ActionGroup, by itself it4 S1 h: y! [# B8 b( B1 u
// has no notion of time. In order to have it executed in
" n Y# L) C( R; v // time, we create a Schedule that says to use the4 t6 g& N. F: b8 [: D* c2 Y6 c; A
// modelActions ActionGroup at particular times. This; H; {: t- o! g- C7 T1 p* W
// schedule has a repeat interval of 1, it will loop every
, h6 x- H4 V) ~6 K! {( F5 O // time step. The action is executed at time 0 relative to: c2 J% ^# w3 t* q* o3 E
// the beginning of the loop.
% Y+ f, J: f! O9 j7 A8 J
5 \: m. _7 w" P4 r // This is a simple schedule, with only one action that is
& Y8 `* |0 o% B; K5 V+ q7 M4 w // just repeated every time. See jmousetrap for more& v& T. S+ l$ d; P N$ v
// complicated schedules.# @8 ]' g$ ~, R% g
8 L6 A% \* J7 g* U( Y8 W* s% _7 O6 P& E$ \ modelSchedule = new ScheduleImpl (getZone (), 1);, O- z. I s+ ]
modelSchedule.at$createAction (0, modelActions);
$ p K. C& ^; `% }+ l ( c6 ]) {8 u1 z
return this;7 c' B9 O, }) _% R2 j0 O
} |