HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 ? P8 Q* {- A' v3 O
/ X. _# K: J$ b" W3 \3 e public Object buildActions () {; {- }* b7 d B9 ]
super.buildActions();! C/ c' ?7 W4 B
# q+ C( L; r" P7 | // Create the list of simulation actions. We put these in8 z. f! u. }2 ?6 D& V
// an action group, because we want these actions to be
; k9 E/ W# F/ q* [3 r$ c3 Q2 i* T8 Y // executed in a specific order, but these steps should; `3 g! y5 y# D% Q2 V
// take no (simulated) time. The M(foo) means "The message
: R9 A9 i5 o7 f4 }& O4 z" r0 T" Z // called <foo>". You can send a message To a particular
6 z. M1 w1 ]9 c: r( G8 l: k // object, or ForEach object in a collection.' S+ G$ K7 \) e/ Y1 L& P4 z9 f
! V* ^! Y/ H' w; b. r9 E3 s' [
// Note we update the heatspace in two phases: first run
" x1 r5 \9 U0 f+ w/ _2 J // diffusion, then run "updateWorld" to actually enact the
: L; u* L! u7 g9 q2 M // changes the heatbugs have made. The ordering here is
3 [0 {& X5 Z0 ] // significant!1 g4 x+ t; u3 o6 p' p7 e. O
+ U8 s5 r- B! x+ e# R; Y) T
// Note also, that with the additional# c. k1 Y" r, g9 q2 X
// `randomizeHeatbugUpdateOrder' Boolean flag we can
+ T, K; t! D: K' B, T- p6 t3 N // randomize the order in which the bugs actually run3 q; @7 y( H* w, w
// their step rule. This has the effect of removing any) L% i! F& {& J4 w
// systematic bias in the iteration throught the heatbug0 W" s M! y. Z0 K; c+ c
// list from timestep to timestep7 A% ^- a0 r4 N/ m n
. U& w; X% ^; S
// By default, all `createActionForEach' modelActions have
0 b% _$ M; m" Z- c& W: L // a default order of `Sequential', which means that the
3 [ Q. z: i, C: j/ Y" f6 H3 h; c& ` m // order of iteration through the `heatbugList' will be6 U/ f- C" q( s4 J
// identical (assuming the list order is not changed! B/ c( ~3 _2 ] m
// indirectly by some other process)., q6 x$ r( f+ `# A4 K& V& V+ S' A
; D2 u3 J# } Y0 _& L6 w
modelActions = new ActionGroupImpl (getZone ());4 F6 k- g ~( ]% V6 H+ ]4 h
& h- N% u4 N3 Z+ G8 }8 A3 ~8 v7 x try {
8 ?" C2 D( A' p1 l modelActions.createActionTo$message- T6 @% e% X* t4 F9 B5 B
(heat, new Selector (heat.getClass (), "stepRule", false));( x1 |) F% E/ u8 u( E5 o7 }
} catch (Exception e) {* \. o7 ^7 v- o; u6 x
System.err.println ("Exception stepRule: " + e.getMessage ());
$ l( C' j- T! R8 @7 Y7 I u% s( T }/ M" s* ~( A0 H/ \& g+ ~
! {5 D9 I% F6 w6 }( V7 ]- q6 d; w
try {. x8 C1 T; @" M
Heatbug proto = (Heatbug) heatbugList.get (0);, U* W1 L, Y' f- _* z( L* R
Selector sel = : s! |* P% w5 W6 `( n& ?$ a r2 u
new Selector (proto.getClass (), "heatbugStep", false);9 ]0 y3 K" t( o: f R! w: C8 `
actionForEach =2 }# C% e! z) c0 c T: c$ Z, T: U
modelActions.createFActionForEachHomogeneous$call- G* c M& C; a% p1 l
(heatbugList,
6 Y/ t" M7 r# C. f5 e new FCallImpl (this, proto, sel,
m( Z' h8 k& S; |& V new FArgumentsImpl (this, sel)));
5 Z0 \* B% e! b9 g4 m, X/ n V } catch (Exception e) {
- ] K l$ m4 j, C9 l e.printStackTrace (System.err);2 \; F2 W, @2 G$ O* z& K
}
# o. a! K. g8 f4 q * |; P5 s0 Z# m! R3 ^, e
syncUpdateOrder ();- Q7 a: d! w3 p! y) u9 ?
3 {, l7 j! M+ ^* T: m0 V/ v try {$ r7 l% h3 {) o8 |' D9 ~
modelActions.createActionTo$message
5 t5 s z, l3 N (heat, new Selector (heat.getClass (), "updateLattice", false));
9 y2 e! U" J" d/ p; Q g } catch (Exception e) {
. |! F+ H# c$ W2 g* l System.err.println("Exception updateLattice: " + e.getMessage ());
; m9 e' `# C# Q4 Q5 g, z% X9 \4 R }; R/ Q( B* ^2 r# i+ x6 H/ g$ D4 S
+ w' O7 Q' @- E9 L$ Q9 [
// Then we create a schedule that executes the, d4 L) k' X+ j" R. v: J+ K
// modelActions. modelActions is an ActionGroup, by itself it
: S K/ [9 w8 A5 Q% M2 C' {6 B+ e // has no notion of time. In order to have it executed in! O9 Z0 ^0 j- c1 l7 f4 E
// time, we create a Schedule that says to use the
7 q- V0 b/ Z3 Z: c0 E: A // modelActions ActionGroup at particular times. This
. [3 U* ]0 _8 ~! X5 u // schedule has a repeat interval of 1, it will loop every
* X9 a7 h8 B$ E! s/ I$ Z7 @, h! D3 } // time step. The action is executed at time 0 relative to* S* ~! O% ]% Z+ Y) r! ~( b: F: n
// the beginning of the loop.
$ U1 v, k+ i9 F- z5 ~! j
( V7 {. N% _# n) ^1 y. D) S // This is a simple schedule, with only one action that is% z4 @1 Q+ S( g5 ^0 V: X1 i
// just repeated every time. See jmousetrap for more* e1 R2 `' W' H7 E6 |
// complicated schedules./ a `' z. V( F$ L. H" e
t1 s% I" `- D3 n
modelSchedule = new ScheduleImpl (getZone (), 1);
$ Y+ T# K v9 T: [ modelSchedule.at$createAction (0, modelActions);% y, G* y' m& B0 x
" M1 {4 ]3 X" f" I, K& C$ s return this;
: h. N% D6 j# V) |( K3 Y# Y, K$ P } |