HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* h" p5 ^. \* m }
! d$ b( O1 s/ f# Q. t public Object buildActions () {( r* ?3 m& v( ^% @- ~/ O
super.buildActions();7 Z, \8 g" H' s9 @' d
' K0 P, E U; Q+ x5 k7 i
// Create the list of simulation actions. We put these in2 p$ s5 L/ G n, I5 b9 T+ x' r. w
// an action group, because we want these actions to be
, Y, U6 q- o8 W# P3 P // executed in a specific order, but these steps should- f' T% `3 ?$ u$ f2 y9 W! {$ s: |
// take no (simulated) time. The M(foo) means "The message; J! ?; `0 U. G" Z, a
// called <foo>". You can send a message To a particular( a7 p* H7 ~ `
// object, or ForEach object in a collection.; [+ U( i( j# c) n" S
; k/ d" k% y( f& J* P+ J: A // Note we update the heatspace in two phases: first run
0 d9 V; Q! L& M8 v" g. | // diffusion, then run "updateWorld" to actually enact the* T2 [" n2 l; b
// changes the heatbugs have made. The ordering here is9 D/ Y3 [$ P- C7 e, v. i! J1 B2 ~
// significant!
" F2 e% y R' J7 G3 {* v+ G 4 Z3 G; s9 S( }& w0 C
// Note also, that with the additional8 l9 f1 p+ D0 |. q' o0 O
// `randomizeHeatbugUpdateOrder' Boolean flag we can
2 E1 o& Y$ g8 B& T9 X // randomize the order in which the bugs actually run, W8 H# y# |& _# p+ I0 V/ [( A
// their step rule. This has the effect of removing any' d3 h$ Y% F# o. M' \
// systematic bias in the iteration throught the heatbug' i' m9 c$ y0 s6 C% W: `
// list from timestep to timestep$ L8 H6 u9 X' P
6 A4 z5 ^) \* R0 X- _7 j, \ J. c
// By default, all `createActionForEach' modelActions have( Z0 U. c1 `- y7 h9 @* c. f
// a default order of `Sequential', which means that the
4 i, O) C1 y3 v' K0 s2 t: Z/ x; I // order of iteration through the `heatbugList' will be
' {/ h5 F# r$ _2 N // identical (assuming the list order is not changed
8 e, v. H/ H4 l3 \3 s* k // indirectly by some other process).- T) r/ Y \% U& l* U9 ?7 c
/ M: \0 ~% z9 y, {
modelActions = new ActionGroupImpl (getZone ());
7 ]3 l6 ^1 m& D% G" E, u) ^+ _7 M/ ?$ Z, q" @$ M2 j% h
try {
, [' } ~# D6 B modelActions.createActionTo$message
. J7 b( h- H9 l0 [: W (heat, new Selector (heat.getClass (), "stepRule", false));
' p) f8 u9 f, H% s } catch (Exception e) {5 ^$ h1 x9 S: @
System.err.println ("Exception stepRule: " + e.getMessage ());# S z8 c! ]8 G4 T, r
}# Z$ t( t' w8 b( X0 T% p, t: t& C! P
' g% |) G1 ~! r( f9 z( N% x
try {" g% E2 t" w8 \* y
Heatbug proto = (Heatbug) heatbugList.get (0);' Y" L9 b9 c1 }3 S( E: ~& k) d
Selector sel = 2 l. U; M( s& k) a( [/ M& A
new Selector (proto.getClass (), "heatbugStep", false); \: i9 M, ~! [/ _5 c# w
actionForEach =
# T2 p' z4 N; V- w S6 \0 t modelActions.createFActionForEachHomogeneous$call
8 U- o/ F" c# @: x6 k1 [8 k (heatbugList,
9 w3 L- v/ G6 D, c. [! K2 f/ W new FCallImpl (this, proto, sel,
1 A4 H4 e; n8 A new FArgumentsImpl (this, sel)));
6 @; ]8 j- v) e; G# s# x- @ } catch (Exception e) {
) R8 s! J% i, T" y e.printStackTrace (System.err);
- _4 E/ c$ H. z- q& e5 D) h; O }+ z O; {0 h! o/ W/ Y2 w2 P
: M& `$ S, H* F2 A, N- R syncUpdateOrder ();
7 }% {( h/ V4 S5 C
: i* E2 u5 f0 Y" W try {
) t% q0 Z- {2 i& Q" K5 |" ~ modelActions.createActionTo$message ( ^/ L3 [5 t) u/ F/ w% N
(heat, new Selector (heat.getClass (), "updateLattice", false));3 F9 w" s. i6 N& ^1 G0 L, i
} catch (Exception e) {
+ ^0 o1 {. U8 @% h- }* v+ @0 _ System.err.println("Exception updateLattice: " + e.getMessage ());
- a' M% L; t, }9 M* I8 n" M }
5 f2 z9 M# R, ]0 N j( n
3 ^' K3 ]4 w6 }0 r: l/ Z // Then we create a schedule that executes the3 v9 p: L3 p/ ]; ]
// modelActions. modelActions is an ActionGroup, by itself it
7 `' {, y# T# V6 |! n // has no notion of time. In order to have it executed in
; i B7 A3 R- {, T2 D& _ // time, we create a Schedule that says to use the
J& w0 b, D5 }% a5 V // modelActions ActionGroup at particular times. This) m/ s+ S5 \; B
// schedule has a repeat interval of 1, it will loop every0 R8 g! H/ V$ o8 M
// time step. The action is executed at time 0 relative to' Y# L4 n! P V% z7 o) n# r
// the beginning of the loop.
* ]+ O% z0 _& F( ]8 x
) E; a2 f7 S3 e/ ]! ?: [ // This is a simple schedule, with only one action that is1 z+ ]8 ^. F* i
// just repeated every time. See jmousetrap for more. M2 G- a( D9 O
// complicated schedules.
& @. u( J n3 d0 ?5 }8 x& I6 M ! s0 A& N( z& W0 o# M, R$ i
modelSchedule = new ScheduleImpl (getZone (), 1);8 N. o3 R$ N9 B6 N5 C
modelSchedule.at$createAction (0, modelActions);
( t1 P& a" i9 D& x + c% m' l, q! p8 I$ c, H* C
return this;1 Z9 e% @2 M5 C- m# Y
} |