HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! G8 z6 d/ U P) ~ \; U2 ?
c0 f7 b0 {8 v( ]9 m/ A6 ~$ N" \. o public Object buildActions () {9 R* z$ ~' O1 b/ T3 \, I! b
super.buildActions();
, p( u t# K1 d# @: m- I6 ^# ^
, i8 B P) a3 s( g // Create the list of simulation actions. We put these in- z# i9 b) ?1 L: \
// an action group, because we want these actions to be
: c7 t4 A, m9 G4 p$ c: M // executed in a specific order, but these steps should- F9 U$ X% J, y! _( G9 ]3 B
// take no (simulated) time. The M(foo) means "The message. X( ~5 L: P! p, i1 k
// called <foo>". You can send a message To a particular
/ ]/ S) n; }0 N7 X" {+ y' [ // object, or ForEach object in a collection.7 C( h4 Z* z5 |; r
+ i# ^" J! H$ k; u3 W( H // Note we update the heatspace in two phases: first run
R; D7 h: \4 b8 W% Q1 q // diffusion, then run "updateWorld" to actually enact the4 R/ J7 r5 J. N4 R
// changes the heatbugs have made. The ordering here is( v* F3 P9 \8 Z3 F# T, D
// significant!
- L$ I6 p' j* n3 k ' g/ ]! s* e1 Z+ |' u
// Note also, that with the additional( z0 `. z) s7 `- J* ~8 \
// `randomizeHeatbugUpdateOrder' Boolean flag we can
( a5 J# Q" ?$ Q8 m3 P$ R: { // randomize the order in which the bugs actually run
8 e; y2 j. r5 H( M; I$ ~ // their step rule. This has the effect of removing any
& }8 }) Z5 A$ V; t" P, \. i: ^ // systematic bias in the iteration throught the heatbug
8 r" X% ]) Y+ E: K // list from timestep to timestep
' _( h9 ?4 Q1 n |% V8 U' c
: O* N1 C) [, ^8 K // By default, all `createActionForEach' modelActions have
+ }. J; d7 ?* K) f; p3 y; ? // a default order of `Sequential', which means that the
' i1 @9 f7 W/ Y: o- t5 ^9 | // order of iteration through the `heatbugList' will be5 D- k: |8 \, J0 y4 j% d
// identical (assuming the list order is not changed
/ e- E, }1 S/ S! { // indirectly by some other process).
9 T0 L( l( ^6 H( F9 \- l
W8 R4 M0 D+ ~8 H7 A, u modelActions = new ActionGroupImpl (getZone ());# }( r: f/ o9 w' f
7 |* V/ s& n6 A+ \% g" Y
try {2 F9 f2 Q1 H3 n2 Z, y: x: b# b; [
modelActions.createActionTo$message. i5 E& a, F% \
(heat, new Selector (heat.getClass (), "stepRule", false));
/ W: w# R# F; N8 Q# L9 @' i } catch (Exception e) {
3 A, ~6 p# ]1 r- X: A( | System.err.println ("Exception stepRule: " + e.getMessage ());
, b* z9 m( h: d2 R0 u }
, G( {# k0 N- X5 k1 _
, R- E3 G- @6 ?' s try {0 T) r& y; T/ l! q3 _
Heatbug proto = (Heatbug) heatbugList.get (0);
7 r- A9 O7 p- s* {9 P Selector sel = ; ~7 T, v% j8 e3 [ V
new Selector (proto.getClass (), "heatbugStep", false);
' D4 f+ ~8 y" [+ C2 j1 m. r actionForEach =
1 ^9 h9 s. S L9 F5 ~2 R modelActions.createFActionForEachHomogeneous$call
# i2 \: t9 c1 [( z; [ (heatbugList,
& P6 A1 F; K q' L& J. b new FCallImpl (this, proto, sel,
9 ~/ |# I3 c. r new FArgumentsImpl (this, sel)));
5 E% W7 q0 C. x. r } catch (Exception e) {, ~/ w8 m5 Q+ x( ~
e.printStackTrace (System.err);$ s" |6 o G- Q7 t
}
. W, Z: J0 Y$ Z0 I 8 p3 |( v! x8 R6 r% S5 B& y
syncUpdateOrder ();5 w0 Q: b& R+ H- c
( }0 C) J. ]" U: i: F' b8 B5 B try {
( p! ^& j& m. z$ O+ L modelActions.createActionTo$message
) T, p4 L, Q8 t0 |# r (heat, new Selector (heat.getClass (), "updateLattice", false));# V( e! d. ?* x+ W/ V& t
} catch (Exception e) {
. f, v6 U' ^0 R8 v System.err.println("Exception updateLattice: " + e.getMessage ());
4 } `! J5 v8 k0 q }8 v; U/ _% r3 y1 k
L: f1 G2 U3 _+ n+ h( m* a) b
// Then we create a schedule that executes the5 a8 z; _& k+ N
// modelActions. modelActions is an ActionGroup, by itself it
! n c( ^% f- ^8 r# A4 X // has no notion of time. In order to have it executed in
# S2 x9 j0 ~4 ?1 {+ D* c // time, we create a Schedule that says to use the
# Z% y2 A) n2 b1 ^+ M9 N! R // modelActions ActionGroup at particular times. This
; V; Z& }. \, s: `' U // schedule has a repeat interval of 1, it will loop every
0 \5 B* E* o4 s4 r+ o // time step. The action is executed at time 0 relative to
- X& O: z# q3 K* Q. V // the beginning of the loop.
& d9 y: {. J, f; M0 g/ d& |
; M5 H$ V5 q1 h: w! V d& N7 O2 U // This is a simple schedule, with only one action that is
6 s; P0 v8 f; k7 n5 s3 W! d3 R // just repeated every time. See jmousetrap for more
) g8 K. ?$ D1 I9 z4 {+ x+ K // complicated schedules./ y- m+ H, n" z& g
9 x( v& U" N/ k3 C' k
modelSchedule = new ScheduleImpl (getZone (), 1);
" G1 k0 E! p2 M. g3 ]! y6 a modelSchedule.at$createAction (0, modelActions);0 N' ?9 l0 S; |( `; w2 P
1 h& L% A0 A% b return this;8 p p [$ V3 [' a( F2 o- x
} |