HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- E: ~: e1 E S) a" G3 n
# t! g9 A( R& z/ k$ m public Object buildActions () {# b0 X1 l1 U; }) @
super.buildActions();
5 ]; Q6 J/ E& S
9 ~; S5 F0 z2 a$ K! I* n4 | // Create the list of simulation actions. We put these in
' `' S) P# C9 y% {7 a S& x) b) D // an action group, because we want these actions to be7 |9 A5 T0 e4 v- {. m
// executed in a specific order, but these steps should
8 }- `6 ~: g' Z' P8 ~8 |* ^ // take no (simulated) time. The M(foo) means "The message
9 {9 X, a8 p# `$ R' J9 K9 g; q // called <foo>". You can send a message To a particular; s& C! b4 A+ J$ @0 o4 M% B1 U
// object, or ForEach object in a collection.
4 a* B9 ^2 P6 f0 P# R, U: Y
1 c8 ~ \" Y/ D9 b0 S // Note we update the heatspace in two phases: first run
1 ^8 c6 e4 { _+ g0 e& Y. \' _0 F7 d // diffusion, then run "updateWorld" to actually enact the! ]" x- E! Y2 w. `+ D
// changes the heatbugs have made. The ordering here is9 u+ J+ c( h+ }* h9 F/ n
// significant!
5 U$ f: f8 ?, B3 w: o7 ], D1 T5 Y( }
8 `3 u# y# S# Y/ q2 m // Note also, that with the additional
! J6 v$ [. {: H" y // `randomizeHeatbugUpdateOrder' Boolean flag we can
. f- z$ ]5 c$ g" F // randomize the order in which the bugs actually run
3 d2 w. ]/ E+ C; R // their step rule. This has the effect of removing any5 w# R# v& c; o. J# Z1 L- w
// systematic bias in the iteration throught the heatbug
( h3 g0 Y; r. w // list from timestep to timestep% n; Y( N& p/ W( I: O
" L, I# I' D7 ]& F1 A$ ] // By default, all `createActionForEach' modelActions have
7 l8 w- C3 R9 M4 n. }' J. L: f // a default order of `Sequential', which means that the
8 E; q' i2 \1 q9 L // order of iteration through the `heatbugList' will be
C# a, r) [. j // identical (assuming the list order is not changed
9 {6 ~% L( W: S // indirectly by some other process).
7 u" q. ?% d$ j+ T . e V. j1 E% O7 q, U
modelActions = new ActionGroupImpl (getZone ());# [) L. f5 G! m g$ E& J! \
( a: a& ?/ i# L4 x4 A
try {
2 J% }( t, p+ j$ w* F' ?7 }1 {) f modelActions.createActionTo$message0 n0 l( O. g( [( c. r, J4 r4 @
(heat, new Selector (heat.getClass (), "stepRule", false));9 v3 \! V' a9 e8 ^! ?4 |3 { u% x
} catch (Exception e) {
/ O+ w5 b0 C' c0 q- h( y! O5 i System.err.println ("Exception stepRule: " + e.getMessage ());0 M7 {& l9 w+ Q2 [
}
2 F4 C2 A8 N* C) o
. c3 r5 x2 |- @9 H, e try {
; H2 k K3 F7 D+ z* g, g9 Z( m Heatbug proto = (Heatbug) heatbugList.get (0);
, ] `$ M+ A: _ N Selector sel = 8 F4 ?2 ?8 I/ y' ^9 \3 K* P
new Selector (proto.getClass (), "heatbugStep", false);
2 d9 z7 c" N4 ?, |6 _ actionForEach =
" ~" K+ |) c y: q modelActions.createFActionForEachHomogeneous$call. ]1 G7 ~- t/ ~* ?5 y8 u& V1 ^
(heatbugList,
+ S) |/ s ]0 G& z7 i. @0 I: z new FCallImpl (this, proto, sel,8 n0 v i) f, n% H: K& V* f
new FArgumentsImpl (this, sel)));
8 m6 K4 @9 W$ D( S4 q; X- h1 D } catch (Exception e) {
) [) G$ W Q( y; L6 o e.printStackTrace (System.err);5 T2 q# R. g2 `& P% m- m; W
}
8 f$ ]- J8 V* m# H7 M
3 V' g8 q" s d% W; g syncUpdateOrder ();
3 _9 i/ _+ d$ q4 `8 q
" O8 v: v: ` Z5 D% ] try {
! t9 L; J% ^, n; J/ e' H modelActions.createActionTo$message # W: [2 N0 N& I
(heat, new Selector (heat.getClass (), "updateLattice", false));. l7 t1 ^1 L1 }$ g
} catch (Exception e) {
$ j. [9 Q; M6 b/ c6 S System.err.println("Exception updateLattice: " + e.getMessage ());3 ~! C: p/ k6 R; b& T( ^% n
}
6 ^3 H8 W0 [, \9 ~' @0 K
- T* Y) q9 x( ^, b/ \8 x7 ? // Then we create a schedule that executes the& c9 x: M4 k1 c; E% e
// modelActions. modelActions is an ActionGroup, by itself it* m4 B0 D* O# j8 u6 F
// has no notion of time. In order to have it executed in
. O* L6 r3 a1 |- A5 [ // time, we create a Schedule that says to use the
9 Z( Z1 E! J% J/ o9 M // modelActions ActionGroup at particular times. This
; U5 E9 f7 D( n // schedule has a repeat interval of 1, it will loop every
7 ?0 V1 \9 A( D // time step. The action is executed at time 0 relative to- t$ c: ?1 f# z% s$ W
// the beginning of the loop./ D9 \5 O+ I( g8 T5 s8 L
+ D5 w3 v5 x" ]- Z) H9 p9 ~ // This is a simple schedule, with only one action that is$ B0 t! Z! F" k* ^5 ?( @$ q) l
// just repeated every time. See jmousetrap for more3 b; R2 S8 @2 C' g ~& J6 B* D
// complicated schedules.! D* i6 u3 I2 X% @, T
k7 a( j/ r- M; y2 }
modelSchedule = new ScheduleImpl (getZone (), 1);
/ a/ ^8 P$ \# D. S! d modelSchedule.at$createAction (0, modelActions);8 f5 X9 ]0 Z( f% y5 q9 g
]) k3 Y, _4 [( k9 v: j
return this;9 c! u9 W$ b4 E) M- G% \; V& Y
} |