HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 D8 i3 X% p2 r$ x x+ k
/ A# ~1 Y/ w: e public Object buildActions () {' C6 t4 _5 Q/ L: S# L# F
super.buildActions();2 x2 \; `4 L% W4 y( k0 O+ X0 ^
2 x- v( z( B% ^" s% v9 { // Create the list of simulation actions. We put these in) f3 L( v6 g, k3 ^( x* ?4 U
// an action group, because we want these actions to be
9 V- ~* o: S q/ s% l' ] // executed in a specific order, but these steps should+ J6 B% @1 d1 N; n9 U( k. }
// take no (simulated) time. The M(foo) means "The message- N: U! G( E0 Z; r0 k
// called <foo>". You can send a message To a particular2 Y' W0 f# J. Q
// object, or ForEach object in a collection.6 I. N, y% E' D1 G& \ u
& W8 x+ w* S0 K; h
// Note we update the heatspace in two phases: first run2 P6 B4 g0 f- c. p2 Z
// diffusion, then run "updateWorld" to actually enact the' }, k' P% i) O9 @! r
// changes the heatbugs have made. The ordering here is8 `+ }% p2 T/ `& B
// significant!# K' d" |3 \: J4 ^. J- ]0 W
4 O$ _; q6 f' B# ^! l
// Note also, that with the additional
- U: ~8 v. q2 e/ O' F // `randomizeHeatbugUpdateOrder' Boolean flag we can
, D4 E r$ z) P. j; l7 X4 `' P // randomize the order in which the bugs actually run
! j' \8 y& W0 g // their step rule. This has the effect of removing any: c. M# X V, S' s1 W; k+ _
// systematic bias in the iteration throught the heatbug
, Y2 E5 o" h6 P+ m1 ]* R+ I( U // list from timestep to timestep
y- h+ ~& t/ G r ' Q1 r C" {1 O3 |, d* u
// By default, all `createActionForEach' modelActions have3 r0 a+ T; [6 @
// a default order of `Sequential', which means that the# L9 ~( k( D( N7 k* d! X# `6 V* U
// order of iteration through the `heatbugList' will be
! K/ _ J" Y( R4 n0 y# U$ I // identical (assuming the list order is not changed2 v! @! M0 T" y0 Z& y( T
// indirectly by some other process).
: w& l; h+ Q. s ( e: k$ u4 K7 }% L$ @
modelActions = new ActionGroupImpl (getZone ());- k7 A8 w$ ]* v6 Q) p6 a; f% W
! J/ v- o3 d9 D( }: V5 b try {
) Q4 ^6 _6 w' a5 I! L modelActions.createActionTo$message
8 B6 s0 r: g4 T' w' Y (heat, new Selector (heat.getClass (), "stepRule", false));
9 b6 `, U3 j; S }6 } U/ |) U } catch (Exception e) {
" ~4 f; B9 q( V# L# k8 B% j System.err.println ("Exception stepRule: " + e.getMessage ());
9 s: u* E9 E0 o$ s9 |/ x }
5 \' y: v3 V1 N8 v, R
1 \: Y# m0 ~: k$ m try {( W, V" w: V2 c3 E- B
Heatbug proto = (Heatbug) heatbugList.get (0);
0 A6 K3 H) |, {. v- r Selector sel =
) Z( X' ~; F+ }; k# \: V8 e7 l new Selector (proto.getClass (), "heatbugStep", false);
6 ]1 Q$ A+ q2 Q+ w& U actionForEach =
6 G( z8 m0 }6 D# {* } modelActions.createFActionForEachHomogeneous$call8 Z: H0 z u+ K" I. @
(heatbugList,5 G8 ~9 q8 V2 N" u7 e; F
new FCallImpl (this, proto, sel,
7 n9 G+ `* f5 n/ ^ new FArgumentsImpl (this, sel)));9 N; `! s2 G, }
} catch (Exception e) {( S5 y* \4 m* @* I/ _5 B& M3 c
e.printStackTrace (System.err);
: b! P& l X6 P& z6 U. G }5 r: `0 k4 v8 G) N* A6 J- v* ^3 t
# h0 }% @2 X( E' j0 U6 O# G! Q syncUpdateOrder ();! w& u' a+ M6 f% o
- u3 A, _ [/ d$ A1 [
try {3 o9 M8 p* ]# g7 M
modelActions.createActionTo$message & L1 | K/ `) e' i+ \( o% ]) g
(heat, new Selector (heat.getClass (), "updateLattice", false));
' s& Z, k# \/ x5 l3 |) q' n- |& m$ U } catch (Exception e) {+ @& @) w- ?2 g3 h# Q3 q
System.err.println("Exception updateLattice: " + e.getMessage ());( F% p& W% j o+ w; o% S
}
# A+ t, y4 I% f+ F5 v1 \, g
# }: M+ X, O9 S% A, r2 |9 p // Then we create a schedule that executes the( P# F0 U5 g. `6 A% d1 H
// modelActions. modelActions is an ActionGroup, by itself it/ p3 H( R: [& [8 O. ]% u% Z
// has no notion of time. In order to have it executed in
7 a8 q8 V& Q3 l( I // time, we create a Schedule that says to use the
! y0 _0 X* A1 k; I2 ~& t // modelActions ActionGroup at particular times. This9 t* Q9 E m R$ o* C! y3 L
// schedule has a repeat interval of 1, it will loop every
) ^ x! o# ~9 `1 ~ // time step. The action is executed at time 0 relative to2 w9 @- `5 w$ L# N7 q8 ?8 Q3 y* y* w" B
// the beginning of the loop.6 Y# r/ q g" }6 e
$ [0 e# S0 j; P0 w
// This is a simple schedule, with only one action that is
- ? T9 j% Y" Z. V! I // just repeated every time. See jmousetrap for more
' {; v7 M$ S+ x/ [4 a% D' \ // complicated schedules.) M. m2 f: @/ P+ L6 s. B
2 u2 c- B& b a& W3 u" }1 Q2 N modelSchedule = new ScheduleImpl (getZone (), 1);* T: K5 b. P8 z, u
modelSchedule.at$createAction (0, modelActions);
" U( p1 L: K3 R# X# o
4 {1 S# O: s) {4 o1 _2 g/ R5 j return this;
* ^# C* v/ k0 u( s; r% I- K } |