HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% b7 }- c- w$ M" J: t' t
" @/ d: l% R. m6 c public Object buildActions () {9 @5 d5 r# n2 F
super.buildActions();
9 _7 A% W( U! D3 s' e: ~2 v
8 |) ^0 K2 q- L; {6 F- F' x( B7 _ // Create the list of simulation actions. We put these in
6 g) p- S/ S! S; |- m+ N9 a // an action group, because we want these actions to be) W! K- I5 n' u7 p
// executed in a specific order, but these steps should8 a: Q9 m# {% a$ {) N5 k
// take no (simulated) time. The M(foo) means "The message
+ V" l( I8 n: I& H" a, t# [& {6 Z // called <foo>". You can send a message To a particular
7 ~, R/ y" t7 o" S1 ~8 o // object, or ForEach object in a collection.
( c0 k5 x T7 N" c, c2 h1 R" ^ ]
# O* C \ d, L! A6 l // Note we update the heatspace in two phases: first run8 Q% ?: }/ Z9 j; B7 o7 ~2 O/ q; T
// diffusion, then run "updateWorld" to actually enact the
9 t0 N5 n4 j; ^* m // changes the heatbugs have made. The ordering here is
) T( T+ Z# s. a // significant!+ N& B6 u5 r/ {6 v* O
8 T2 R4 n ]# l, Z2 y
// Note also, that with the additional7 W M# d+ B1 G! L# r7 @: g! ]
// `randomizeHeatbugUpdateOrder' Boolean flag we can
: y' u9 c4 t* T# \+ F // randomize the order in which the bugs actually run$ z- v# v) c) F1 g+ H( n
// their step rule. This has the effect of removing any
+ Z1 Q: P3 P' j2 C1 U // systematic bias in the iteration throught the heatbug/ x- Z8 Q4 H& D4 {) ?# N, H
// list from timestep to timestep& {* ~) E$ B* s# E3 x4 U8 B, v
9 P, P" I$ g# L! l# } // By default, all `createActionForEach' modelActions have
) m1 M0 v$ b; h // a default order of `Sequential', which means that the
) `4 J( t6 `1 g( P7 {: B p // order of iteration through the `heatbugList' will be
+ G1 a# V' J2 \- ]3 l# T$ T' Z // identical (assuming the list order is not changed
& J" N0 D( ?: W) P2 E) q$ O // indirectly by some other process).
( V: Q+ [. y7 I2 W. r. S & ~0 s- m, J: n6 c8 n
modelActions = new ActionGroupImpl (getZone ());
0 C( t- r' n5 Q0 z# f% D L
6 n9 Q6 v/ i" |, ]# L: ^: ~6 E try {. ~) x" w' A! N# w5 t5 }! N, j
modelActions.createActionTo$message
9 c/ [! T$ f- Q& n" r' K (heat, new Selector (heat.getClass (), "stepRule", false));4 _1 J( E4 o* m/ b
} catch (Exception e) {2 A% k9 {9 H) ]* O+ {
System.err.println ("Exception stepRule: " + e.getMessage ());0 z, P1 A1 c3 m ?7 t
}
- F# K; Q8 F0 f6 S" j0 W& k; m4 L7 W. T
try {6 ?8 a- Z3 v# C* _2 e! j
Heatbug proto = (Heatbug) heatbugList.get (0);
2 `# @3 m" `. _! d3 K! X& E2 g Selector sel = U1 E' Z- I6 X$ I8 ^2 ]# r* }
new Selector (proto.getClass (), "heatbugStep", false);- [' a" v' g4 d7 m3 d- F/ l
actionForEach =0 F6 B" U6 h, m5 ?/ I
modelActions.createFActionForEachHomogeneous$call
5 J# ] o! X1 u) m (heatbugList,
s) x U) I) ^2 g. g7 x3 \ new FCallImpl (this, proto, sel,
8 M& a. X) G( k9 i new FArgumentsImpl (this, sel)));. \8 J4 ^, g( ]; O; W
} catch (Exception e) {
; ?' z$ o* T9 o e.printStackTrace (System.err);' l' [- I- b' L* ~# F+ v Y
}
0 r9 I! } Q* k( l% ]/ x6 H 3 G- J% [& V+ i1 S5 F, g
syncUpdateOrder ();7 ]) D3 i! B8 M# J- v8 f
' f; m% N# Y$ d; t. Q
try {
: M3 m6 B. P; ?8 e. w modelActions.createActionTo$message
7 d. k- L3 b3 j0 [$ V, P (heat, new Selector (heat.getClass (), "updateLattice", false));: t c- Q. a" o- r; K- f
} catch (Exception e) {
$ i# M$ a- O0 K; i# q. P, C" b System.err.println("Exception updateLattice: " + e.getMessage ());
& K& n1 {4 R8 z6 l0 N' j, `% y! ` }: w' w z8 p) i( Z; P
# d% f) e. V+ H$ r- b5 p; ]4 j
// Then we create a schedule that executes the
( g- L, p3 a1 G& M- O8 Z6 y( O0 B% L // modelActions. modelActions is an ActionGroup, by itself it
/ t5 F1 P# @" D' g0 [4 z r // has no notion of time. In order to have it executed in0 |" x/ \# }3 F/ H9 W8 M
// time, we create a Schedule that says to use the, W# T3 ^1 p. Z$ W& z, i
// modelActions ActionGroup at particular times. This
2 {* b& }) Z% p. b // schedule has a repeat interval of 1, it will loop every
) o% G f4 M/ S // time step. The action is executed at time 0 relative to
" Q0 \, _, X; u8 d% R. z1 K( M // the beginning of the loop.
. w# V8 }& ~8 j( d; i* z, }* b( K6 K2 ~. n
// This is a simple schedule, with only one action that is/ P; O4 c7 c, t' a1 N
// just repeated every time. See jmousetrap for more
* e, c' o- B* G! o3 } // complicated schedules.
" m: J1 N0 f3 w/ ^ k) v+ b; D; u
|& _4 h3 S5 \# A( r modelSchedule = new ScheduleImpl (getZone (), 1);
) z' a9 E5 T: W- R) L2 l modelSchedule.at$createAction (0, modelActions);
9 [. `0 X. X3 q2 G; X# h( Q: T ; @: K# i4 R$ `, R
return this;6 ?7 U4 g$ f2 _# ^; l' c' U& E
} |