HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ n1 o9 Y b4 i: w/ y( L5 {. Y& m
2 G W4 Q7 ^- {) U+ [ public Object buildActions () {7 K7 F; X2 V- N" k( h) p# p
super.buildActions();
! J9 }, S4 ^" m! ?
+ U6 M0 ], N' B5 G# p' f" O // Create the list of simulation actions. We put these in
$ W4 y! R6 O; Z/ a' L8 R // an action group, because we want these actions to be* [2 R9 |& I4 u) _( i
// executed in a specific order, but these steps should0 x" y" O. E I/ b6 A8 n
// take no (simulated) time. The M(foo) means "The message
9 u/ Z k+ d+ M9 M& J N& J+ e // called <foo>". You can send a message To a particular
% b6 w1 B( v. u+ } // object, or ForEach object in a collection.
/ m4 m/ B. Z$ m+ l' j8 D& d " x: P9 M" U+ d- a+ O& K
// Note we update the heatspace in two phases: first run) T: }8 b. m6 B) }/ }
// diffusion, then run "updateWorld" to actually enact the, V1 Y& i! a9 z3 q% m; y
// changes the heatbugs have made. The ordering here is1 ^$ x) x; v; ^# S9 s
// significant!$ d- a& t, s$ [; _4 \# e: B9 \4 u
: r. r8 M. R7 W$ ~+ s // Note also, that with the additional* b2 |, K) u- n& W" ] i
// `randomizeHeatbugUpdateOrder' Boolean flag we can
3 n. G1 _" S- o2 c5 ?+ R% f; h+ p // randomize the order in which the bugs actually run
& x0 z, q9 e6 U# I7 l5 W# K0 H // their step rule. This has the effect of removing any7 ~. V$ p# n N4 w
// systematic bias in the iteration throught the heatbug
4 ?; `, E. X m, G, y) l* S( k // list from timestep to timestep+ ], h2 O4 p0 e. j& I7 U! G
: G: ?7 H/ R8 @7 t) Y& {4 _" s
// By default, all `createActionForEach' modelActions have+ {8 J( W# Q1 F- y
// a default order of `Sequential', which means that the4 g- r# j* g% c. C9 M+ `
// order of iteration through the `heatbugList' will be, }+ D) `, c/ x
// identical (assuming the list order is not changed
! O4 i* G9 Z0 H5 q" Q; p& u // indirectly by some other process).
0 F- {! O9 D. E, F2 O" U `. B- `6 [; j4 }
modelActions = new ActionGroupImpl (getZone ());" W" X5 }7 j* j
5 j3 y( _. t9 b& O* `0 F try {1 p* R/ L1 Y; h P- l
modelActions.createActionTo$message
6 H1 L3 M6 \: J( M! G3 k (heat, new Selector (heat.getClass (), "stepRule", false));
9 W9 ?/ y8 L# h1 t7 ]+ q& N } catch (Exception e) {
1 Q I9 |$ H+ c6 A2 { System.err.println ("Exception stepRule: " + e.getMessage ());
$ u9 d2 X+ q3 ~; P2 M }3 V7 T" D! f( X! B* D
' h8 |( s7 t, s9 U3 x7 ?4 `/ b3 C try { z; w( ^6 l: S2 y# `
Heatbug proto = (Heatbug) heatbugList.get (0);+ F: n2 E: m; F3 V' r* e0 D
Selector sel =
& r1 B3 X6 U5 ~' {+ f0 p new Selector (proto.getClass (), "heatbugStep", false);4 `1 W7 U d1 R$ |6 L
actionForEach =0 z# U5 B. N) M% k7 U
modelActions.createFActionForEachHomogeneous$call; x6 N0 L8 p' ] } y) Q
(heatbugList,
! u5 D8 c+ L C2 t& H$ |) h new FCallImpl (this, proto, sel,
! F, @ p" M/ }- @2 ` new FArgumentsImpl (this, sel)));
: F( }# z5 b: o } catch (Exception e) {
! B8 u) T% `$ C# u e.printStackTrace (System.err);- Q+ W+ g" f6 E) `7 i
}
8 @ y$ s2 w% F' I+ J5 u , e! m5 ?# r, n4 W* N
syncUpdateOrder ();! L$ D$ f, F( f2 ~9 O! O! y
3 E+ n0 m h# `: z5 _ try {" B) j* a1 E; b: f! P
modelActions.createActionTo$message
9 K1 G7 Y% }2 r5 x (heat, new Selector (heat.getClass (), "updateLattice", false));2 O( ~( {2 A* d5 s/ J
} catch (Exception e) {9 n9 j# A/ B( v f& z- ]/ f
System.err.println("Exception updateLattice: " + e.getMessage ());- O' `2 r, q+ d1 W
}
) i+ O) k/ e6 {' ]; `9 y3 h: u/ F9 _ 1 u- f7 k; H* j$ U0 g
// Then we create a schedule that executes the
( O5 z) N, g( v. N E // modelActions. modelActions is an ActionGroup, by itself it' [5 q9 n) }' ]& i5 _' u4 K. m
// has no notion of time. In order to have it executed in
- o3 J; k i6 [ // time, we create a Schedule that says to use the, C9 L* u4 e% V& R! H7 H4 o
// modelActions ActionGroup at particular times. This
6 b5 E0 Q5 g$ [ // schedule has a repeat interval of 1, it will loop every
9 i. A* B$ q4 e1 Z4 b( M* _ // time step. The action is executed at time 0 relative to
@7 {8 o( [) }3 ?/ x3 @$ H // the beginning of the loop." e1 [+ _7 |& }- b& }
, w. f* N) L3 y" L5 G) Q0 q // This is a simple schedule, with only one action that is
; t/ R' x6 u. T, m // just repeated every time. See jmousetrap for more! Y: s" p$ c7 m; W# U |/ G
// complicated schedules.
5 R8 ` Y$ Q0 {1 A! W- w* m5 A 3 p: N6 ]% D( s" O
modelSchedule = new ScheduleImpl (getZone (), 1);, Q- `% J% n$ d0 p/ y
modelSchedule.at$createAction (0, modelActions);$ B" r6 q- A2 Z) l. s9 R
" \7 @; y( K( W1 F; t7 T1 y
return this;8 l3 b# i, Z/ A
} |