HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 P7 _4 R( C* J0 V. F$ K
; S0 \( S& t( j; b K) x# z% W; D public Object buildActions () {
# ^- U5 E, z( B/ }: Q6 o$ M3 S* ? super.buildActions();# u$ P5 }% V4 {6 w3 `
, A+ Q4 W4 {, e" S" A+ } // Create the list of simulation actions. We put these in! l7 I8 @6 ]; Z2 ]9 Y9 D' J
// an action group, because we want these actions to be4 g1 t4 `+ f4 @
// executed in a specific order, but these steps should0 U4 ^ z X. }- E$ Z9 M
// take no (simulated) time. The M(foo) means "The message
' V0 Q" b* @) r( p3 p // called <foo>". You can send a message To a particular
4 k2 I; k$ W4 B; n! Z // object, or ForEach object in a collection.- D; [! y$ x2 X1 b b8 m
& [0 n! p7 e m3 R! L // Note we update the heatspace in two phases: first run
8 v' A9 t* {3 y# { // diffusion, then run "updateWorld" to actually enact the) ?+ @6 Z, R% P7 X
// changes the heatbugs have made. The ordering here is+ ?" r3 a& I+ m# s
// significant!. n( k) N# @- h- Y( o$ H
3 G8 Q1 o1 F4 L. y m. C& ~ // Note also, that with the additional1 a! F" R" c: D5 I3 G% s
// `randomizeHeatbugUpdateOrder' Boolean flag we can" Z7 @' E5 o% E7 M- `. a$ _( X0 R( w7 N
// randomize the order in which the bugs actually run
! h ^# V( n- v4 C8 s& G# x* @- u' m // their step rule. This has the effect of removing any
. i: ~) x+ K' L8 H7 X // systematic bias in the iteration throught the heatbug2 e' N, ?, v5 o- j0 ^
// list from timestep to timestep
* R( F& r* T$ t$ Z : Z9 K$ L2 o' b0 _( \ @5 H8 e
// By default, all `createActionForEach' modelActions have2 ^# o! l! y! P& Q4 u
// a default order of `Sequential', which means that the
4 h8 ~, s+ ^" V* ~' q$ }1 q // order of iteration through the `heatbugList' will be, x8 u8 a3 i" L# y
// identical (assuming the list order is not changed9 i- M) J4 q( E# Y0 L0 I
// indirectly by some other process).
% r+ ~3 a- V+ M- p/ f5 W + Z; b, B. I1 j# P- l+ e/ A, Q8 }( W
modelActions = new ActionGroupImpl (getZone ());( i+ ^: K% p. j! W: p0 y
: W6 a4 r8 G! w! n! h- j2 o
try {0 @9 r1 J- D* q
modelActions.createActionTo$message/ u: i* I6 p! X7 [7 W8 x6 ~- s
(heat, new Selector (heat.getClass (), "stepRule", false));
* Z; j, Z7 D, t9 z# l1 a- @! I } catch (Exception e) {' I) Z2 I$ u" A* M% F6 H
System.err.println ("Exception stepRule: " + e.getMessage ());
3 g7 _$ Y( p Y1 B! I! L& a+ W }9 J: g# B- V% [$ L. M$ a
2 U" y6 V9 K$ J* Q
try {
, ^! N+ `2 W s Heatbug proto = (Heatbug) heatbugList.get (0);
6 z, ~$ h2 g+ j( Y Selector sel =
6 q% D" U; _4 T, y' o new Selector (proto.getClass (), "heatbugStep", false);
. _+ O8 @* D+ P) S. p2 F actionForEach =
' L% `( N1 Z6 D5 |% w1 e modelActions.createFActionForEachHomogeneous$call
3 P" b# F8 c1 N. L. B- p5 W2 j2 { (heatbugList,$ Q6 K( p! ^/ P
new FCallImpl (this, proto, sel,
- E' }+ W1 f6 A, Y0 u; S2 m new FArgumentsImpl (this, sel)));% `* T% _. ]! ^& x+ W/ {
} catch (Exception e) {
: t0 u! D8 V7 y) ^ e.printStackTrace (System.err);3 J8 L. t, K5 B9 V9 n1 ~: m3 d
}6 K/ W9 ~' |( P, @
0 _1 H( z* ~1 j* D3 l7 k, E7 s1 O syncUpdateOrder ();6 t4 w( K7 P! X0 D7 Y
4 [0 Y4 A8 W9 [: d
try {! f* b0 S' s8 K" m! Z% o; D2 i6 g( J8 `
modelActions.createActionTo$message
# {0 O/ z3 ~" H1 x' m/ O9 V9 i- K (heat, new Selector (heat.getClass (), "updateLattice", false));
1 e- H. G! D; h& f, R } catch (Exception e) {4 W- Q0 I# n$ J8 Z/ O+ u
System.err.println("Exception updateLattice: " + e.getMessage ());! m# o$ u! k4 A
}
, {/ p; D6 R* |0 P$ ^* _6 u0 |! V
; e& z# E0 I) Y4 S // Then we create a schedule that executes the7 b/ X& Z2 j- c8 n/ y) o
// modelActions. modelActions is an ActionGroup, by itself it
% ~! w* U0 O4 O, {. ^! O6 D // has no notion of time. In order to have it executed in' _4 v- j% C, P6 m# U0 i3 P7 o' _
// time, we create a Schedule that says to use the
, O y+ y, h4 |, a // modelActions ActionGroup at particular times. This
2 ~) E9 h6 m+ z$ i // schedule has a repeat interval of 1, it will loop every" u( I z% X/ I ~
// time step. The action is executed at time 0 relative to
' e) {$ B; z9 u, x- P E# r m+ k // the beginning of the loop.
. d; L" A5 M; K5 `2 D3 c
4 V5 [! V3 q/ D# t0 G // This is a simple schedule, with only one action that is
$ N7 B4 \/ `( S // just repeated every time. See jmousetrap for more
5 w6 {) F8 z4 c' N2 A" r // complicated schedules.! @2 k; a8 w: o
. t7 J1 Z$ x8 C; t- O" b+ F
modelSchedule = new ScheduleImpl (getZone (), 1);4 `3 ~1 `, A$ i9 c+ i
modelSchedule.at$createAction (0, modelActions);3 ]- f7 G4 A( u
4 m) @9 h! E2 f( X
return this;
( v# C2 R3 ~* R( E% E0 Z } |