HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% n2 b3 ?, K9 U: L
- x) b% v& J6 ?' X# L1 \5 f) f. v public Object buildActions () {0 G6 ^4 K' _/ D) ^0 W$ I
super.buildActions();
+ H# _$ w1 V# _
3 ]9 y- B& g* p4 B6 S" Q // Create the list of simulation actions. We put these in! G3 }) q' _+ `+ @/ H
// an action group, because we want these actions to be
/ M8 ^: C5 V. j2 Y/ m5 ? }+ n6 p // executed in a specific order, but these steps should
: f* }9 w! o! H$ w8 G' _: T/ S // take no (simulated) time. The M(foo) means "The message' P# Q) c# W1 c2 m
// called <foo>". You can send a message To a particular
" V* B! T; X9 x; J // object, or ForEach object in a collection.$ \& `, B2 V8 S; m5 K
1 V# @* w" [8 b, y# r3 ]1 H+ Z: `
// Note we update the heatspace in two phases: first run
+ L+ p" p7 |7 T6 u D9 R // diffusion, then run "updateWorld" to actually enact the/ N1 Z9 i% j$ A1 F4 _
// changes the heatbugs have made. The ordering here is8 P. H! {* c" a7 `9 M M
// significant!
v4 n7 r! ^4 v
+ Q8 B4 q# b6 [0 B* n' J% R // Note also, that with the additional
1 {% \: r. _2 W3 w: E3 S // `randomizeHeatbugUpdateOrder' Boolean flag we can e4 z7 _ ~8 f$ i$ h: Q
// randomize the order in which the bugs actually run G6 l* b* c+ m) `% I
// their step rule. This has the effect of removing any% X O% `3 m1 {
// systematic bias in the iteration throught the heatbug
' ]4 ^0 g2 P6 V // list from timestep to timestep6 Y& u$ z& g3 n8 g1 _ x! W3 P% w( B+ _
' H+ I" d8 g, p& N) n: @- f
// By default, all `createActionForEach' modelActions have' P* w2 k) h& o5 @! [0 a
// a default order of `Sequential', which means that the
- c* |, i2 j5 U2 j // order of iteration through the `heatbugList' will be( Q2 Z: ^. o. F( ]
// identical (assuming the list order is not changed2 a/ A/ ?: d7 A- y
// indirectly by some other process).
6 L9 w( q- J8 S' u # s$ u' R) e9 K/ z- Y i/ ?$ E& \
modelActions = new ActionGroupImpl (getZone ());+ X, ]& A$ B5 V" p# q. M
1 N, ~6 a8 o! P& l try {/ D5 n, M- q; k0 @9 }7 t9 T
modelActions.createActionTo$message- J# q3 p% G( E8 G
(heat, new Selector (heat.getClass (), "stepRule", false));
' L- Q* A' T N& |1 c6 [ } catch (Exception e) {' x0 t% M8 L7 V/ {- h0 `
System.err.println ("Exception stepRule: " + e.getMessage ());
" E/ S8 Y4 v1 @3 Y* ] }4 K0 N8 b; p% W4 Z( j( Q9 w' W0 u+ c
" F; f @: V1 h7 g. d' l( ?3 |. V: x1 x try {- f' J9 H% S9 I* b9 V
Heatbug proto = (Heatbug) heatbugList.get (0);
8 U' b# c+ h5 s! I* F Selector sel = ! I( }8 [( x( K
new Selector (proto.getClass (), "heatbugStep", false);
: v) F7 Q, ]/ i0 S) S# m actionForEach =
& @& q8 v8 p1 L+ [3 R) Z; Y8 m- L modelActions.createFActionForEachHomogeneous$call. s/ n0 m) @ d: |3 D t, |
(heatbugList,
2 X+ e6 e# j7 Z- B+ n8 p new FCallImpl (this, proto, sel,( X+ T! _5 s+ P- k: ]
new FArgumentsImpl (this, sel)));& L {3 V$ o/ m, Y) j/ z7 c
} catch (Exception e) {
2 d8 ?, R. d: v X6 x% y e.printStackTrace (System.err);
& N% T2 [) T1 x5 N: X: [7 D9 e7 C3 E+ F }
& I" f$ @8 s% m4 L7 y+ x. g
+ p! Q5 t( J/ C U# ~) A: H% a2 Z4 d3 j syncUpdateOrder ();4 O6 q7 H1 W: k$ W# a: ~% J) ]
1 p H1 w6 T% ~* v( U: e7 a/ y try {
- H" k" F3 H2 @- A modelActions.createActionTo$message 6 C" b$ B, s8 h* \
(heat, new Selector (heat.getClass (), "updateLattice", false));2 A+ K: y7 y, z* z% ?- I
} catch (Exception e) {0 e- {, r- C3 }" p
System.err.println("Exception updateLattice: " + e.getMessage ());% \$ [6 C6 [- c
}( O! V& K5 U$ Y# ]4 ^3 _
4 t( o$ R9 ?; u% E
// Then we create a schedule that executes the
R6 D; t# G6 U) `/ ? // modelActions. modelActions is an ActionGroup, by itself it
2 {. Z& g7 T' A; K# o // has no notion of time. In order to have it executed in( U* g: N+ B6 T- g- ]" {# _" V5 e! q
// time, we create a Schedule that says to use the) B" g$ d9 q1 F% b5 u' Z
// modelActions ActionGroup at particular times. This
" B/ o2 ]- T. ^% W- h // schedule has a repeat interval of 1, it will loop every3 n) X+ `; u" e' A
// time step. The action is executed at time 0 relative to6 {5 C& ~$ y3 ]" v3 u, l
// the beginning of the loop.
$ D: H# @% D; s$ x W" R
5 Y; [; j. G7 X; n // This is a simple schedule, with only one action that is; E5 {1 {3 \; _3 b) I
// just repeated every time. See jmousetrap for more5 o' `! F' J3 }% p+ \
// complicated schedules.
5 W* V- I% v0 @% l4 \7 p 4 C1 n; _; {! n9 u$ R
modelSchedule = new ScheduleImpl (getZone (), 1);
2 M. g( N' N2 o0 L8 A# B9 U modelSchedule.at$createAction (0, modelActions);) s5 E$ V: L* C* Z% ]) R! Z
5 q# @2 q4 a4 l+ h8 S return this;( Y# ~+ o7 p6 Q7 N
} |