HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' a+ Z4 N( u: |+ P' J4 C
6 F* D( U# V' c0 Q. _
public Object buildActions () {
% ]. f8 h5 O t$ |7 j" [! L super.buildActions();
C, U& `+ J7 N' L9 L- j- V, a , y* E: u) o @( G, S; P
// Create the list of simulation actions. We put these in
1 S4 h; ]( u( }3 h; t6 A // an action group, because we want these actions to be
' F, z ~ J; r4 x2 i& A% P2 A // executed in a specific order, but these steps should
( U" P7 Q2 Q7 p // take no (simulated) time. The M(foo) means "The message
( `, x, G1 Y$ u3 i // called <foo>". You can send a message To a particular
# F) h0 D" e9 t6 T; K // object, or ForEach object in a collection.
5 G# { `( J4 |0 W5 k) `# k* X
0 S T6 q% a2 g* ~0 |4 D! N2 ? // Note we update the heatspace in two phases: first run3 c: c+ j! ^. x F# l/ \9 E1 O* m
// diffusion, then run "updateWorld" to actually enact the
5 M. K0 H3 ~) L U8 L( }' ^ // changes the heatbugs have made. The ordering here is% W. ]7 i, ]$ ~; Y
// significant!
8 d; Z/ b* A: l8 t8 l& P; Q0 O
, B5 f) N$ A2 y // Note also, that with the additional& Y8 a# c5 v0 L/ t& W& e
// `randomizeHeatbugUpdateOrder' Boolean flag we can- E( ]" A! ^8 F; z
// randomize the order in which the bugs actually run
- ^1 m' }( J0 q( I // their step rule. This has the effect of removing any/ i# \8 B" [8 |- }4 c5 n6 B7 c
// systematic bias in the iteration throught the heatbug
- b, A0 B3 T5 D/ _ // list from timestep to timestep: c7 E1 n9 N4 z# ?
9 X; Q- N4 N. g8 V# x: n // By default, all `createActionForEach' modelActions have
: i4 `. l; ]9 s' u: v // a default order of `Sequential', which means that the5 _( o2 T0 Q9 _8 ~! T
// order of iteration through the `heatbugList' will be
$ U; b \$ Y+ F, V d3 ?% v- S // identical (assuming the list order is not changed6 V; a+ X4 U% k6 R5 }4 Q% I" Y; b2 D9 V
// indirectly by some other process).0 n& U. m# |/ C6 P9 t6 O3 r4 Z
- }. a) L# ] p( |
modelActions = new ActionGroupImpl (getZone ());6 P8 x. E {. s9 O( n8 G
! X$ N3 A# `: I! y% u6 s
try {5 D! p9 o1 d! b# T
modelActions.createActionTo$message1 P9 z; Z! R( `" M- D- k
(heat, new Selector (heat.getClass (), "stepRule", false));
Q2 Z" L9 q% L } catch (Exception e) {
9 K% D% x3 S/ h7 {/ P. l System.err.println ("Exception stepRule: " + e.getMessage ());* c7 Y* k" m" w9 F) h4 n
}1 g3 J% c7 Q. K2 v4 A% ?8 O) U, O
( y, X" f$ O, D, G try {: c) M" a2 y/ U4 q# ~' ~" V; m( p6 z! N
Heatbug proto = (Heatbug) heatbugList.get (0);
& \1 g* }# f, f1 K Selector sel =
, D% Z1 F) o" y* J8 Z4 q( |! N! B new Selector (proto.getClass (), "heatbugStep", false);
4 O* @$ X$ t& U" O6 E actionForEach =
& `: q0 A7 y6 h( d$ x modelActions.createFActionForEachHomogeneous$call% Q6 k4 P+ p1 p6 l- X" B" h. s
(heatbugList,6 B& r E5 u2 j, b$ l: V$ k
new FCallImpl (this, proto, sel,
3 t1 Y; o* H. ?1 ?( j new FArgumentsImpl (this, sel)));
$ X( l" R% t5 Z } catch (Exception e) {; z; f0 U- Z0 i1 Y
e.printStackTrace (System.err); `2 `- r6 _3 A
}
# Q5 J, y2 x$ G' ^9 U6 M
$ G* q0 e7 ~. U: }+ e syncUpdateOrder ();
8 Z% |( s6 Z; y" x
. m3 E- C# A* m try {5 z+ g4 B' _ \0 p: _
modelActions.createActionTo$message
1 c U6 q. B. t (heat, new Selector (heat.getClass (), "updateLattice", false));' R3 ]4 ?5 d9 `
} catch (Exception e) {( C5 H4 L/ i! h
System.err.println("Exception updateLattice: " + e.getMessage ());
" A/ s: {' S5 A% S }* M5 c5 J7 R2 { p9 h
/ S0 L5 u7 `+ f1 F7 M1 s; O8 \
// Then we create a schedule that executes the' `) p+ F5 J8 b
// modelActions. modelActions is an ActionGroup, by itself it0 w% N8 i' {( e/ r( y+ A/ _" O
// has no notion of time. In order to have it executed in9 l7 e" M$ U# Y4 r
// time, we create a Schedule that says to use the( ?, F6 B1 V4 `: E
// modelActions ActionGroup at particular times. This
8 x2 V5 I* D( w! b // schedule has a repeat interval of 1, it will loop every1 ]* M7 V- Q, ?
// time step. The action is executed at time 0 relative to
3 _4 n, D+ n# l' T$ J3 m2 [ // the beginning of the loop.
. E3 V4 S o3 u( L
4 M% R5 e/ E* ^0 \5 s) ` // This is a simple schedule, with only one action that is
6 R B1 W2 Z( C, d' w9 S // just repeated every time. See jmousetrap for more
% e1 J% m/ ]; @1 `: L/ K/ P: z // complicated schedules.7 G+ ]* M6 @ Y! T6 w4 Z: P
* t9 s: y Z7 G" i' u4 n
modelSchedule = new ScheduleImpl (getZone (), 1);
/ Q4 t+ s# g( R* w modelSchedule.at$createAction (0, modelActions);
( v9 s7 L6 k( q) P 7 z, `8 A6 i, x, q+ X9 L
return this;
% \6 X" x9 T$ H } |