HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 `/ z' I5 L8 ~9 x! m' j
$ O# j" h3 ]' Z public Object buildActions () {
2 z& `7 j" x" P$ r: B super.buildActions();$ a3 `1 @2 L3 ~( R8 I% `8 \9 J
+ K O+ `! t9 z( D8 E+ F // Create the list of simulation actions. We put these in
5 v+ R$ n; M' X // an action group, because we want these actions to be/ U- q5 X6 }$ z* L/ ?) a/ q
// executed in a specific order, but these steps should
5 C. E% l) d' I( J- d9 ~% c // take no (simulated) time. The M(foo) means "The message
& ~( i! O9 x3 c6 e; y* i // called <foo>". You can send a message To a particular" \6 e5 b/ F5 G$ ~- s
// object, or ForEach object in a collection.
+ J( R, \7 X% j& ^3 d% X
$ E7 o; T0 W! U k // Note we update the heatspace in two phases: first run! U+ ]8 i1 w+ N+ B2 j* X
// diffusion, then run "updateWorld" to actually enact the0 b4 L( s* B: @ \. m& W$ v) P9 w
// changes the heatbugs have made. The ordering here is
: z+ Z$ |, \& ?) h# ?7 U // significant!
/ M; }3 K- M5 N3 R% G* v) M0 G4 t ( C) Y7 c1 }! U, I' O
// Note also, that with the additional
" h) ^; t* f7 p* i3 B // `randomizeHeatbugUpdateOrder' Boolean flag we can
/ k C t- g5 Z! c: o" e // randomize the order in which the bugs actually run
/ @1 K* f3 f/ R6 u" W8 k // their step rule. This has the effect of removing any F. V4 c2 w- o _5 m
// systematic bias in the iteration throught the heatbug
0 F) q$ P' C3 } // list from timestep to timestep$ N# q8 O3 n3 w
+ D% K3 o7 P0 Z
// By default, all `createActionForEach' modelActions have
- R' i) h/ L* A1 { // a default order of `Sequential', which means that the4 K- [" O% O, T# l
// order of iteration through the `heatbugList' will be7 [1 n8 P% [- O- q# W% m5 G, f
// identical (assuming the list order is not changed
) V" x% ]( L- j% f5 W h // indirectly by some other process).
& m6 N" D. n8 {& l$ Q" Q# K & s6 g- [; i7 a2 x. y
modelActions = new ActionGroupImpl (getZone ());
5 p- w, }# P3 R* t `' u2 G
2 P6 U6 z! z4 A7 w: L5 p9 K X try {4 A$ t; f8 j; p, C8 Z3 p4 I
modelActions.createActionTo$message
- ~/ Q4 P3 r6 B* c (heat, new Selector (heat.getClass (), "stepRule", false));& |& |, K; U8 F7 x1 S
} catch (Exception e) {
6 z$ [9 F, }7 M( o L2 ~( s9 e System.err.println ("Exception stepRule: " + e.getMessage ());" ?. \. I; |5 y5 f- T5 k
}4 u! F3 h+ q, T* Q1 U
( L" K5 w3 p5 Y' ?8 X" _
try {5 u# f, |4 f+ K
Heatbug proto = (Heatbug) heatbugList.get (0);: }- N8 o* d1 o% j, G2 }* d1 T- p
Selector sel = 0 N' G) a( Q# x3 w9 L) ^ m1 ]% `* X
new Selector (proto.getClass (), "heatbugStep", false);
8 d% V) X7 b. o" M* c/ k O actionForEach =
) W. r$ q; ], g/ t modelActions.createFActionForEachHomogeneous$call: l; L# v& ~" {3 M9 ?8 N; f' ?) t
(heatbugList,6 H& p( M$ F* v
new FCallImpl (this, proto, sel,
Y( x# }& ?& D) N0 f new FArgumentsImpl (this, sel)));
4 ^5 t$ N1 k3 Y3 H& w; A# ] } catch (Exception e) {: n/ ?* `8 F# u4 h
e.printStackTrace (System.err);
/ E5 s6 I! ^1 G2 c+ N }/ n, w9 E e8 O+ i( E
9 N+ }( b" r- ]( {1 `( U
syncUpdateOrder ();8 \% n# P0 z" R) |; c
6 V7 \& o$ V1 v3 R" F$ e, N
try {# d7 s+ O1 _# w+ Q% G6 \* ~
modelActions.createActionTo$message 2 \6 @& E' X7 ?3 u# N
(heat, new Selector (heat.getClass (), "updateLattice", false));
4 b+ b! ]- |4 ^. U: c# k& k) b E } catch (Exception e) {
" k- a! Y9 {6 h0 M; Y% ? System.err.println("Exception updateLattice: " + e.getMessage ());% ]8 I8 w$ d- P
}
0 I o* l: p" _; e 9 y8 B( f9 E' ?; d# K
// Then we create a schedule that executes the; P9 `- }: K5 E$ A' r
// modelActions. modelActions is an ActionGroup, by itself it" p ?' T2 e$ i2 i# [$ w
// has no notion of time. In order to have it executed in/ f4 ~* Y, f" E1 |2 k$ ]' n
// time, we create a Schedule that says to use the3 I. I) d8 O/ Z; \2 b; ?' y
// modelActions ActionGroup at particular times. This' T# K4 q6 q$ @' y7 S- Y! V; j( `
// schedule has a repeat interval of 1, it will loop every
$ H+ m1 ~; D! f; v M9 A // time step. The action is executed at time 0 relative to
" C5 |' I4 I; o7 ?7 g% L6 A // the beginning of the loop.
0 i( ?# W. |3 f- v/ O: w
7 L- ]; [2 S6 S$ [+ i, }7 z // This is a simple schedule, with only one action that is+ I3 k+ c T: g( J# T$ [' r; J q
// just repeated every time. See jmousetrap for more* [/ A1 I3 a+ c1 s; e5 K
// complicated schedules.
- s1 [ }- Y& F/ `4 s. o
# l; E- ~, ~$ V( g$ I modelSchedule = new ScheduleImpl (getZone (), 1);
) O% r) K% M" M( l/ ?3 s6 y modelSchedule.at$createAction (0, modelActions);9 W; G1 i& N i: `
3 ?" K- C6 M5 u( R
return this;
- x. P+ G) |% B1 l9 l/ _. q+ L" Q } |