HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; O. { Y: n9 m9 d. j8 _- {
! z+ L O& O4 E public Object buildActions () {
3 x: a* t' \: k( I: S9 H super.buildActions();
( y; E/ d" d+ l
$ \8 ^, ~, O& o& d" C // Create the list of simulation actions. We put these in
5 u6 @$ m- d: I9 L/ P+ w- h // an action group, because we want these actions to be. K% _: k$ b0 O) `% |
// executed in a specific order, but these steps should
% h# p J( V; r2 ?5 |3 i% r! T // take no (simulated) time. The M(foo) means "The message- ^$ X* X8 D1 A2 W) v
// called <foo>". You can send a message To a particular8 ]# \2 k0 R: z$ |) k
// object, or ForEach object in a collection.
5 c. e2 ~. i8 c# v( i
2 A5 K% [# ~8 @! H: Y7 ~ // Note we update the heatspace in two phases: first run
, }+ A) [# R, ?# P } // diffusion, then run "updateWorld" to actually enact the
: t9 h! q2 m5 \& }, E // changes the heatbugs have made. The ordering here is; y* N; b2 J+ z' g0 o
// significant!# J' g' y: t8 @- Y, T/ k
2 ?- |5 y, t( r+ |! O+ d // Note also, that with the additional2 d8 j4 N* x; D* U
// `randomizeHeatbugUpdateOrder' Boolean flag we can' A$ N) \. b m) M$ C" e) N& w
// randomize the order in which the bugs actually run9 B6 _% L1 A' O0 d9 N$ Q
// their step rule. This has the effect of removing any
: G8 N; W: O# v- z6 j) e // systematic bias in the iteration throught the heatbug
4 I R' L2 M$ i% Z5 l // list from timestep to timestep" J5 T7 }' f- U$ X- x A/ B
/ r4 n ^/ p. n( T+ e // By default, all `createActionForEach' modelActions have4 h/ W" o V! x. k
// a default order of `Sequential', which means that the5 n, O8 l! ]$ {& G
// order of iteration through the `heatbugList' will be
* M% Y* z7 Q+ ^. I9 d& r: b // identical (assuming the list order is not changed
) u9 a: d; ^# e1 k) |3 d6 ?4 h // indirectly by some other process)./ t0 E* X/ u3 @* T! }* ]0 {! ^) Q* |6 y
0 c8 ?6 z( q, j5 Q' m modelActions = new ActionGroupImpl (getZone ());( h r8 Q% v# I% }
: Y% a" L4 s2 ]+ z T try {; g* n6 R- m/ [9 O h
modelActions.createActionTo$message
) |9 G. U* ]1 m1 d' d( Y (heat, new Selector (heat.getClass (), "stepRule", false));8 L: C1 k5 h& j: ]$ A
} catch (Exception e) {
9 F5 l# ? } f; k9 f+ G System.err.println ("Exception stepRule: " + e.getMessage ());
( k" J! u: S3 [) u, g% U }# J9 c3 N" J% B/ n/ ^1 S1 \; Q
4 I. v5 M! H2 ]
try {
8 q" R2 B9 J; F# k: Y4 v; d Heatbug proto = (Heatbug) heatbugList.get (0);
- ^8 U( ], t/ R) L% H4 J Selector sel = , `( t3 h' m) S6 w' O3 T0 k' o; [
new Selector (proto.getClass (), "heatbugStep", false);
{+ S6 N7 ]4 D: P$ Y actionForEach =' C1 A- A1 v. T1 ?: `
modelActions.createFActionForEachHomogeneous$call
( m- i. b9 T$ \% q/ m( G9 d: I' x (heatbugList,
- N( ~$ }9 T) a& p' l5 L new FCallImpl (this, proto, sel,
0 \! w' j+ Y9 a6 |5 G6 u new FArgumentsImpl (this, sel)));
# r+ J. X6 ]5 q } catch (Exception e) {5 r. {. w4 x, l+ k8 l
e.printStackTrace (System.err);4 Z- t# [) A0 i& @6 T6 m; Y( o1 K
}
7 G; }6 T0 V4 t( Q% u0 H
8 V E- P) P( T3 G0 u& D syncUpdateOrder ();
! t) u; \! v$ G( F# F& g
+ i$ m- }& n$ V- z7 {( G try {
. o6 ~/ S5 h4 R8 I9 B" a* N, W3 V6 N modelActions.createActionTo$message - x" n) f9 Q+ j4 v4 U, T: G+ d/ |
(heat, new Selector (heat.getClass (), "updateLattice", false));# s% d8 N% L& h9 S; G
} catch (Exception e) {
; a) o) e" ]8 b; `6 a System.err.println("Exception updateLattice: " + e.getMessage ());0 o0 W) S+ C+ C; X
}
( M' {, R/ A- ~2 d 6 u4 [6 b4 a$ a$ y
// Then we create a schedule that executes the- J4 {" `$ u4 E4 }6 b9 Z1 ]. F/ m
// modelActions. modelActions is an ActionGroup, by itself it
9 L9 k. g. @( V( T // has no notion of time. In order to have it executed in, A& r1 j) g* x: D& f4 _% m; C9 f8 J
// time, we create a Schedule that says to use the
, F9 ]% q T" R* G, `% N // modelActions ActionGroup at particular times. This H2 z) q# f9 n' }9 h( E$ D
// schedule has a repeat interval of 1, it will loop every, B5 u+ l0 r; c" j! F2 u- o
// time step. The action is executed at time 0 relative to
$ \& o1 L- D/ Z6 [ x // the beginning of the loop.
& K9 I. A6 {+ z- H' d1 O# n' D1 {2 m" Y" H
// This is a simple schedule, with only one action that is' E5 ?* j: @. m+ j9 M( v7 J
// just repeated every time. See jmousetrap for more/ h0 ^3 Z2 t$ ~! W/ I
// complicated schedules.
1 l; [$ z7 w5 [
7 [5 \6 V( M3 F' g5 G; ~ modelSchedule = new ScheduleImpl (getZone (), 1);$ U2 A5 Z/ G. R. J
modelSchedule.at$createAction (0, modelActions);
' S( _# f- ^/ S
. P# l N3 d1 v return this;
8 T2 o% \, {. v$ |9 f+ `6 @3 Q } |