HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ u3 c* M! s* _. k4 f
; h% A& @! e+ E% U+ ?- M4 t, d. }! F8 e* f public Object buildActions () {
, Q6 R N# x" U super.buildActions();
3 x: f) y+ a/ `6 R' k7 T / p4 W0 E; s; \, B- u
// Create the list of simulation actions. We put these in9 T. n- Y1 R4 z: S. `
// an action group, because we want these actions to be' m6 V: `: L! p! v2 D# k
// executed in a specific order, but these steps should
: z/ s! i3 o& e; {% b% A // take no (simulated) time. The M(foo) means "The message( |4 v p0 O M8 j, f1 P. ^
// called <foo>". You can send a message To a particular% ~' P) d- O5 I( h, k# }
// object, or ForEach object in a collection.
3 m2 L! g+ b; V" Y4 M- k 2 j8 n6 J1 k' I! v' a; l
// Note we update the heatspace in two phases: first run
* I+ ~5 P7 E+ n, n: N // diffusion, then run "updateWorld" to actually enact the" G( w: w, \' m! ]2 P
// changes the heatbugs have made. The ordering here is
s9 C2 O, T8 r4 O5 V! b1 h // significant!7 R2 I$ y6 B1 D' [& B. Z
' c" ?3 a1 G0 q8 S
// Note also, that with the additional
' r7 d Z# [ X9 f // `randomizeHeatbugUpdateOrder' Boolean flag we can
. d! X% Q z' B // randomize the order in which the bugs actually run
3 g5 N/ N3 z6 o) ^4 f- ^: \# G! t // their step rule. This has the effect of removing any
2 V5 y4 l% q' H1 W9 ]5 _ // systematic bias in the iteration throught the heatbug
* K. h+ Z6 {* N9 q" K // list from timestep to timestep
4 g3 { R+ @! C% H& x
8 j8 v' m$ n- s* j3 @- _ // By default, all `createActionForEach' modelActions have
# a3 O3 g* w- r) s" d // a default order of `Sequential', which means that the
1 U& A- l/ h7 U // order of iteration through the `heatbugList' will be
8 R, e6 j: U; R // identical (assuming the list order is not changed* ^! _' g7 m6 G: l1 |
// indirectly by some other process).' V) o s3 X- m7 V+ R6 E, L4 |
2 f% W J: H' c8 @4 p0 m6 |# x& w) { modelActions = new ActionGroupImpl (getZone ());7 s4 i. x+ a5 C
* ^6 | N% ^8 r3 y
try {$ A$ K4 Y9 W8 U* L" ~) H4 a7 a
modelActions.createActionTo$message
" t' B8 d5 N3 {0 G (heat, new Selector (heat.getClass (), "stepRule", false));
" t& @ O0 p! f" D7 @$ _ } catch (Exception e) {
; T" @& S3 p) A/ ^& ]: O/ B# h System.err.println ("Exception stepRule: " + e.getMessage ());
; E$ B# w' f1 ]7 r- g% | }
7 K( r$ _3 K% p
6 }+ y3 L k; M: I# X try {
) U6 m# `8 f7 }! R! ? I- S+ @ Heatbug proto = (Heatbug) heatbugList.get (0);
/ \+ l) b0 k o" H2 t Selector sel =
- m6 ]6 @5 n2 c- c# ~ new Selector (proto.getClass (), "heatbugStep", false);
: v. H1 W# O. C0 x+ `+ c actionForEach =
2 p, ^0 p; h2 j9 I ] modelActions.createFActionForEachHomogeneous$call" I7 x8 z$ R3 w9 c( d
(heatbugList,
" X& o9 d' h& E- [& R+ O new FCallImpl (this, proto, sel,
$ ?) p% Q9 y0 c' @" N new FArgumentsImpl (this, sel)));6 V9 |; {: S/ O' M
} catch (Exception e) {
: m; j0 D: A4 H N e.printStackTrace (System.err);
( T. x& C" a8 v2 A% z+ ] }
; t) V N: H- U: w% d6 Z+ v0 Z
7 I9 B& h) Z- A, e: q3 F syncUpdateOrder ();8 F$ A( }; d+ X" i+ E
# E9 v3 _9 X4 i H" |
try {' u- M) s6 a9 F9 F
modelActions.createActionTo$message + Z3 c8 ` r0 G+ f, m- }8 m
(heat, new Selector (heat.getClass (), "updateLattice", false));# |3 D+ h5 @9 p1 H, ^' }
} catch (Exception e) {* c8 H4 @+ X+ |. D/ j: r5 T/ z
System.err.println("Exception updateLattice: " + e.getMessage ());4 p+ `6 F$ q2 n: |% F
}3 J0 n; ] O/ N; w' J$ o5 ~9 L
4 j& q7 Q5 c4 P& G" {; B# _1 o // Then we create a schedule that executes the ]5 w7 ?* j; ~$ a4 P6 N! W
// modelActions. modelActions is an ActionGroup, by itself it
) T& P% V1 s+ V9 y // has no notion of time. In order to have it executed in/ {: G3 S7 U+ ~( I" m' U9 }
// time, we create a Schedule that says to use the# p9 O# `/ y% @3 A: W6 d$ B$ R
// modelActions ActionGroup at particular times. This
2 V& N( g3 l8 m; y: O: J2 \ // schedule has a repeat interval of 1, it will loop every9 H$ L, n) w- H; S8 P# e
// time step. The action is executed at time 0 relative to
, P2 U1 T, K; K* ~ // the beginning of the loop.
?, y: l( p. u9 Y" n. b% a1 S6 \0 t% @ z; i+ o
// This is a simple schedule, with only one action that is% |) _: g" @7 w$ f `
// just repeated every time. See jmousetrap for more0 _) I7 k8 `' n+ p8 @
// complicated schedules.( g% l M' T( D9 Z9 x! _* o
3 G+ L/ v5 L6 E6 ~2 X; {3 g modelSchedule = new ScheduleImpl (getZone (), 1);9 L9 g3 T% E7 n7 z- {& w/ u
modelSchedule.at$createAction (0, modelActions);2 e0 v! E2 ?% A8 A" p& ]. K/ \6 b
, d6 C* n: g v+ v
return this;% b1 V4 g q0 h1 u: Z$ F5 G
} |