HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 z& ?9 g' L# s7 i
4 H# h" n; V8 ^
public Object buildActions () {
$ v2 c- T; A* e2 N9 C% u9 q1 \) d super.buildActions();. j- [# g9 _) t4 ~9 O8 ~
" {7 j" ^! b3 @ // Create the list of simulation actions. We put these in9 J, ~: s3 ~% O
// an action group, because we want these actions to be
0 @1 q/ k( V$ o5 M* U" r/ n: C // executed in a specific order, but these steps should
: t9 c( J3 x1 o' W1 V. n. X // take no (simulated) time. The M(foo) means "The message
" K* X- |- k$ \ // called <foo>". You can send a message To a particular" [4 n( A! K; h9 T5 v" X6 N, M
// object, or ForEach object in a collection.! z5 q0 ]9 @1 V Q" h, a
& e6 u) ~+ b% ~+ i% ^0 u // Note we update the heatspace in two phases: first run
; c* U$ P+ \7 s G // diffusion, then run "updateWorld" to actually enact the; v6 q- V' u- b
// changes the heatbugs have made. The ordering here is
" D9 ~0 `. j: |) } // significant!
6 k: I+ X# t; @+ ~2 ]+ k: a6 s& i
" g& V( {! Z: R9 _- p* A // Note also, that with the additional8 I8 L5 I8 e' \- X4 ]6 d' A, b
// `randomizeHeatbugUpdateOrder' Boolean flag we can5 [ f% v& m* }; u% F7 L
// randomize the order in which the bugs actually run( l: v* r6 z1 c& ?0 u" y$ c
// their step rule. This has the effect of removing any. A8 D& r r" `
// systematic bias in the iteration throught the heatbug
9 d6 ~4 }; F: g. @) L( R- h. V // list from timestep to timestep
# o+ X \: g Z" K( Y: K
6 b5 S* z& S7 m' l& J$ b2 p- J // By default, all `createActionForEach' modelActions have c K) R4 x- x
// a default order of `Sequential', which means that the6 W/ q1 z" m: P! o
// order of iteration through the `heatbugList' will be( n* U! c' b: k# u
// identical (assuming the list order is not changed
3 V# N3 m2 v9 r) a/ ^6 w5 Y# w // indirectly by some other process).
, _. S4 M5 W, @3 V $ @! O/ f% X, I, O* V( E
modelActions = new ActionGroupImpl (getZone ());( M8 K6 ~0 O/ [6 G# {" I; W
; C! ^( \5 N7 f1 `) D! g) A try {
7 j5 R5 P% c2 s( d5 D, } modelActions.createActionTo$message) d0 k& `1 G) _. `( R$ c
(heat, new Selector (heat.getClass (), "stepRule", false));
& _. r0 d9 Z4 R8 X" e4 D } catch (Exception e) {
; H2 Q( h1 U9 _, P8 G8 v8 T+ @ System.err.println ("Exception stepRule: " + e.getMessage ());/ k- w+ g8 j, n+ U6 }
}" v4 g: g& H' _5 z
- E+ d+ G! l: P4 y/ ?' A, N try {" J! E+ P# G, l1 C' H9 F6 ~
Heatbug proto = (Heatbug) heatbugList.get (0);' f3 E$ M" l7 {+ p$ m
Selector sel =
* d; v: K6 T8 [9 R( }( u6 S new Selector (proto.getClass (), "heatbugStep", false);/ o! V! U; l1 U' {2 J4 w }; e
actionForEach =- l, ]7 V$ x6 p4 D7 J8 |) i& }
modelActions.createFActionForEachHomogeneous$call
& ]7 y# T$ ~- `; N% G6 C (heatbugList,
0 t, K7 y0 R0 l' \; N/ Q new FCallImpl (this, proto, sel,% K1 W! @# I. d% k8 b# b) n
new FArgumentsImpl (this, sel)));; h7 ?* K4 J& T/ k& s/ X
} catch (Exception e) {, q2 m0 n+ R1 o& I6 L% n' ?
e.printStackTrace (System.err);
5 L b1 }3 [0 ~$ d: U+ z }% J& T% `1 u: w( p
' s& G6 W8 L1 {' o syncUpdateOrder ();2 e' B' E8 Z- M; i% |
3 j/ x) N' `; E& x
try {4 U1 y% p% o( m+ [
modelActions.createActionTo$message
5 D" i2 @. h# k' O (heat, new Selector (heat.getClass (), "updateLattice", false));
6 `* c0 X" Y6 D } catch (Exception e) {. ]3 l: t7 ^: _2 }# ?3 f* C
System.err.println("Exception updateLattice: " + e.getMessage ());: @2 J5 g, f1 s( R( `/ ~3 T% O4 j
}
( w* q* H; S% n" C7 D2 T
* M2 E1 b. N7 `$ r // Then we create a schedule that executes the6 R+ w- n0 L, I
// modelActions. modelActions is an ActionGroup, by itself it
, o9 O: W! X/ c1 v4 V4 l4 ?. O" ` // has no notion of time. In order to have it executed in
# \0 v3 I$ d2 I W6 f* J, l6 @( Q // time, we create a Schedule that says to use the
% ?9 }. \" r7 V+ w* G3 L7 | // modelActions ActionGroup at particular times. This
. c9 U0 t+ |0 H" L% ~ // schedule has a repeat interval of 1, it will loop every
. s" N0 @; R! M7 @7 V; c! e ? // time step. The action is executed at time 0 relative to
5 b& J$ O! @) a. {. J/ x2 S- ` // the beginning of the loop.% r6 j+ n8 A$ B% C2 q
; P% L) M( i- @) I3 c: \$ A8 h
// This is a simple schedule, with only one action that is! q( D4 a$ v6 N
// just repeated every time. See jmousetrap for more5 h N( d( t: |5 o1 y1 [
// complicated schedules.
* r1 O% z! `3 D1 Q0 T9 }" U# X
0 \6 y" r6 [9 L modelSchedule = new ScheduleImpl (getZone (), 1);
; j. N( h6 H: N& x modelSchedule.at$createAction (0, modelActions);9 K0 | c( ]2 |
* m o9 j. S/ S2 g return this;
1 u) C, S* x* ~4 e; y5 w3 G, J6 | } |