HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 M) ~" f' f: }# \ T M
- ]5 f* N: O9 F# ^5 n; u& L$ V
public Object buildActions () {: r9 y' [6 F8 { F0 Z( w( m4 d, @; t
super.buildActions();8 R+ q" z# Z \9 c" f/ q. G9 h- \
# z( K- A9 _/ ~/ K) P5 z" j0 M; U // Create the list of simulation actions. We put these in, F! O) m [( A/ p. l
// an action group, because we want these actions to be
8 ]4 V! C* X: R2 x // executed in a specific order, but these steps should5 Z8 K D$ R7 V! o
// take no (simulated) time. The M(foo) means "The message
. O$ q3 Z! A' q7 D; d6 }2 t // called <foo>". You can send a message To a particular( u8 J, {% I5 Y0 ^" ?4 F$ n
// object, or ForEach object in a collection.
% U' k/ \9 S( E: |. ~- D ) f, |* \4 F+ b% z# f b# P5 d1 l
// Note we update the heatspace in two phases: first run
- [1 s$ K% ?8 m7 R0 h, B9 ?1 L0 O // diffusion, then run "updateWorld" to actually enact the
5 R/ r9 I2 |7 e // changes the heatbugs have made. The ordering here is5 n( { s: \$ x ?5 M3 o
// significant!: S$ U( O, U1 h& g& |/ o
4 Y! ~3 D. y: c$ H$ D, W' U8 o4 `
// Note also, that with the additional
$ O+ f$ r& N+ Z# X. C // `randomizeHeatbugUpdateOrder' Boolean flag we can
) A8 M) \/ V K- G1 _9 `7 Q# ]" [ // randomize the order in which the bugs actually run
5 Z/ V W+ `9 y4 Q& v6 c# n0 I // their step rule. This has the effect of removing any
# h# ]9 D. l' R1 O+ d // systematic bias in the iteration throught the heatbug
; V4 _' j2 B8 Z/ B) l // list from timestep to timestep; }. w8 f+ @/ {
( w" j1 i( i4 T; V: ~5 _, n
// By default, all `createActionForEach' modelActions have
4 P( J0 ?0 {0 H$ l // a default order of `Sequential', which means that the
# {) P/ E+ w" c+ } ^% n // order of iteration through the `heatbugList' will be& I( K* Z/ ]" W# G
// identical (assuming the list order is not changed. s8 U+ _9 s1 B& q1 L# B
// indirectly by some other process).
9 [9 a$ z* ?8 `4 z * B0 S4 d& u$ X7 v8 C6 I- M% d
modelActions = new ActionGroupImpl (getZone ());
6 o. k8 o; i7 N. K0 v6 }# U0 q& k4 X
try {0 D$ d, }5 L/ u3 Z9 g5 s
modelActions.createActionTo$message$ ]$ z* a6 Y5 ]1 Z- e6 J$ L
(heat, new Selector (heat.getClass (), "stepRule", false));
/ u' Y4 h' u- N. ? } catch (Exception e) {9 X0 u9 }( o. U0 _ x
System.err.println ("Exception stepRule: " + e.getMessage ());! O; b7 l& B' F6 p! `
}7 |( E. s. c# {: [) O
B: a2 ^- c V7 o try {
6 w6 }9 B) o# d' R6 Y# w, o$ g Heatbug proto = (Heatbug) heatbugList.get (0);
$ \% J3 J, K: ? Selector sel = / K0 H J: q- v! R' ^
new Selector (proto.getClass (), "heatbugStep", false);* G5 M8 M+ Y7 L, _, ~' T
actionForEach =& n5 F+ }! B3 c
modelActions.createFActionForEachHomogeneous$call% M, }! e+ \# l' ^
(heatbugList,- L7 t2 n* t+ Y/ x5 w
new FCallImpl (this, proto, sel,
0 T! f( i8 L( P( c: e new FArgumentsImpl (this, sel)));
- [, @9 y% p, _; q } catch (Exception e) {
: ]! u0 J* {" H8 w% V. u e.printStackTrace (System.err);
y/ v' x9 p" O% ]; K }* e$ N$ s/ h3 I' r% r* h- @
! S7 j; y/ i% B" ~5 g/ i* K syncUpdateOrder ();
* Q0 r0 [5 Q1 Y- T1 J% Y0 v/ k' `
$ ?* z; }4 S( Z! ~) j3 w try {0 |( d. m" f' Q0 `) K' O9 J# J
modelActions.createActionTo$message ; ^3 c: m% C; s) r5 `/ F* J3 o
(heat, new Selector (heat.getClass (), "updateLattice", false));8 Y, s; P' w7 z
} catch (Exception e) {) C6 _3 L# i. B; ^$ o0 [( z. |) I# Q9 p
System.err.println("Exception updateLattice: " + e.getMessage ());
/ i; ]% }9 D$ ]8 h: H }) n* T( ~2 ?0 Q7 c
# e, q6 `! g" { o7 ~6 h' U& x // Then we create a schedule that executes the
( D# t1 {) u- p9 F- l // modelActions. modelActions is an ActionGroup, by itself it3 Y% ?7 R4 I; y( C' u. m, R
// has no notion of time. In order to have it executed in
& i! N( Y0 Z4 `! o! h7 z // time, we create a Schedule that says to use the7 `# C9 } P% p$ s
// modelActions ActionGroup at particular times. This
* g( I& R" o% s. o, x // schedule has a repeat interval of 1, it will loop every
; ^0 @2 P4 q m9 |/ `! j // time step. The action is executed at time 0 relative to
q( j! T/ g' _" ` _) |/ ` // the beginning of the loop.* } ~5 L1 T0 N
( H3 f4 P6 o B$ \6 |
// This is a simple schedule, with only one action that is
3 H6 s" Q" H2 ^6 z // just repeated every time. See jmousetrap for more
" m+ `1 H3 b3 t // complicated schedules.1 R% C- H) j" D5 G. `% x' Q- \( G/ B
; |: @" ~& M1 p
modelSchedule = new ScheduleImpl (getZone (), 1);
8 Z4 w, P( p# d. S2 l modelSchedule.at$createAction (0, modelActions);
+ _, `3 s1 s: W 7 N4 a5 c8 b1 `
return this;
5 w/ t7 s' S4 h/ G } |