HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) N) E6 P* t' T+ ? H; R1 L" g: W/ I7 C: m8 e# @" g( r1 G5 H
public Object buildActions () {4 b# q+ [0 t/ n# K* P4 J+ K$ w
super.buildActions();
& ~3 P6 u8 @5 s2 [. L; h
0 X c: {/ \6 w. R, B9 u // Create the list of simulation actions. We put these in g* m1 B0 g3 V
// an action group, because we want these actions to be
! g! v) u8 U! S' f) c // executed in a specific order, but these steps should# V9 f9 _& R- v3 s5 L6 n5 m
// take no (simulated) time. The M(foo) means "The message
; l3 w2 K0 I" ]- h // called <foo>". You can send a message To a particular
. `) ~9 a, d6 ^ s: w8 Y // object, or ForEach object in a collection.
, Z( g' W5 m+ e" c0 A$ L% I, Q$ Y : ^) k$ t- ^) ~8 Y" G7 \: ?
// Note we update the heatspace in two phases: first run
7 Q) A" @; L9 m S' {' O/ H // diffusion, then run "updateWorld" to actually enact the
& ^ _) _/ y: m1 r- F // changes the heatbugs have made. The ordering here is
* o: t1 N7 g3 Q1 z) n ?* S- K // significant!
4 b4 C* O% R) T i8 o8 h9 V" M 2 C; z$ c# Q/ ^# q' T1 n
// Note also, that with the additional
* {1 P# T+ s& g2 g* O" F // `randomizeHeatbugUpdateOrder' Boolean flag we can
c/ g J9 x; c; ~# R // randomize the order in which the bugs actually run
3 P4 i' ~$ ?/ u7 j8 l" |, N // their step rule. This has the effect of removing any& @; {. x/ B D4 z4 y6 a% `
// systematic bias in the iteration throught the heatbug
6 t/ P. _: O9 K' z* `- s" B // list from timestep to timestep# ~8 h- }9 e1 Z- W- ~+ Y, V
7 I- p5 J& r9 ~' B1 C+ ^
// By default, all `createActionForEach' modelActions have
- x. u! ?/ m2 S! }: i0 N8 b, j0 }' T7 Z; v // a default order of `Sequential', which means that the7 s G; [6 a- t- c4 g- [
// order of iteration through the `heatbugList' will be
z" L( Q7 g) T7 g% k // identical (assuming the list order is not changed1 S6 {: `* |; }6 a' a2 Q( K; J
// indirectly by some other process).
& }4 {4 O) d1 ~) ` * c; K2 |( Y2 |2 ?& p
modelActions = new ActionGroupImpl (getZone ());
: { _. M7 g# J. a0 S0 B7 N; c6 C, l5 J- c m6 M
try {
N2 k: u& |7 S4 ^3 } \7 c; S modelActions.createActionTo$message
* T2 y u- [8 ^: k; Z3 { (heat, new Selector (heat.getClass (), "stepRule", false));
2 Y* L( l# @' G1 [9 S1 w7 L+ d } catch (Exception e) {6 ~, }+ o# T) P
System.err.println ("Exception stepRule: " + e.getMessage ());+ K# ^1 g* Y( z, ~! H
}8 ]* L- F9 h' v/ @
! m$ Y: [' I2 d' _ O3 l4 _8 I
try {
/ u$ r! n6 B' n, Z7 ` Heatbug proto = (Heatbug) heatbugList.get (0);; }* h$ h0 x' H/ ^4 w- G1 g2 e: n& m
Selector sel = # u' e3 M0 }8 z5 I
new Selector (proto.getClass (), "heatbugStep", false);
( k$ S' C1 ?/ ^4 t% h8 f0 z# w actionForEach =2 B3 l: Z4 J# w+ {% m, }9 i8 G
modelActions.createFActionForEachHomogeneous$call9 n9 I8 B/ K! B) s* G8 l/ h
(heatbugList,
. q7 T' D' c/ I8 x' p+ C4 b2 ? new FCallImpl (this, proto, sel,
D9 }5 Q" Y; I7 w new FArgumentsImpl (this, sel)));! y3 ?( b) t$ B/ Q9 q8 i, g
} catch (Exception e) {6 T) U: I$ ~5 Z4 B( R& D
e.printStackTrace (System.err);
+ I M" d* P8 E0 S0 d! A }
2 Q3 Q7 B f5 F 4 C$ @3 _2 l. b% [2 ^* V( \1 L$ w
syncUpdateOrder ();
/ S! M- F7 L% F/ B( W
8 a! ?( i0 H" U1 b try {: _4 U. ]( r, b) E/ b0 c
modelActions.createActionTo$message # ^/ C5 l, o. k$ Z6 m1 K
(heat, new Selector (heat.getClass (), "updateLattice", false));1 ?% ]) Y" [- T0 s5 n) G; _; F3 Q
} catch (Exception e) {' q; F2 N2 ?6 s9 ^$ F) @9 t- \+ K
System.err.println("Exception updateLattice: " + e.getMessage ());
* E; J5 \9 ~. O+ I2 b: K }4 u! _8 q# t3 F. P/ o8 r
! v! m) V' ^. R: e$ {
// Then we create a schedule that executes the
# o5 c2 F! ~8 w( |2 _ // modelActions. modelActions is an ActionGroup, by itself it2 P6 @/ i4 X' H* G3 U5 ^' t
// has no notion of time. In order to have it executed in
0 S& V$ w5 q3 L // time, we create a Schedule that says to use the
! [! H! t; c% ]: s1 W+ p0 c, o, w: H // modelActions ActionGroup at particular times. This {4 _2 |& }2 |
// schedule has a repeat interval of 1, it will loop every
/ w! E0 W9 @( U // time step. The action is executed at time 0 relative to
A7 B: K$ c( ~, b) D // the beginning of the loop.) w) O3 Q8 J9 t& C
: C! U; ?+ @- L) R. ?! q; d6 Y // This is a simple schedule, with only one action that is1 B7 ^+ X2 e7 `* j+ \
// just repeated every time. See jmousetrap for more2 O9 f% D7 `( W- x- v2 A, Q
// complicated schedules.) K+ z& t4 Q7 @8 x5 E* ^: F M
# n p& t' P) [
modelSchedule = new ScheduleImpl (getZone (), 1);, u5 ~3 Y2 u* m. i' T
modelSchedule.at$createAction (0, modelActions);
: w. V8 i5 i* b1 j7 }
, E8 @3 }' _3 r5 P, w return this;1 T' p$ Z# o# y, k1 d
} |