HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( i* s" c- w5 h; d; Y' q7 m5 o
( {) D! N+ K' M* n! q3 ? public Object buildActions () {
+ L2 D5 ~1 L% i6 |+ Y super.buildActions();. q# Q! k' Z1 J- J) g2 @
, z& H/ C, h9 v, G5 ^* x- c
// Create the list of simulation actions. We put these in* m- o3 {8 J! }* m" B
// an action group, because we want these actions to be K; F4 ~$ `( z' E9 ^
// executed in a specific order, but these steps should2 I3 m+ X$ z2 G; D
// take no (simulated) time. The M(foo) means "The message
! [- O/ K. z N( Y // called <foo>". You can send a message To a particular
; ?" X5 X) p" s* h* K; H2 K // object, or ForEach object in a collection.
' y! ^7 b. e. u" R4 q) { - w; o% u' C& a; }& {4 E$ ~& A
// Note we update the heatspace in two phases: first run" l0 P& l! t P0 T" x& g
// diffusion, then run "updateWorld" to actually enact the
- r! @; m, H @: v // changes the heatbugs have made. The ordering here is
6 P* j1 P/ {; a4 B8 i" p4 q, }$ W7 } // significant!7 F7 Z2 j" f2 \( D
" r' y9 `1 d" a
// Note also, that with the additional
0 x2 Z; U6 q' }( W // `randomizeHeatbugUpdateOrder' Boolean flag we can
% c" }' a0 A: g3 b" J // randomize the order in which the bugs actually run1 ~9 C/ P" J% j; o
// their step rule. This has the effect of removing any
$ j8 ^4 P0 t6 o( ^# ]* Z* p // systematic bias in the iteration throught the heatbug( P1 [1 z1 {0 \
// list from timestep to timestep
# t$ A ^. ?0 t5 R3 |3 v( F
4 Q" `0 m/ I" l // By default, all `createActionForEach' modelActions have" w* y2 [- c* j( u9 G' \9 V
// a default order of `Sequential', which means that the4 D+ i* U% s- @) u
// order of iteration through the `heatbugList' will be
, j+ h+ J: Y) r4 P5 v y; P9 ? // identical (assuming the list order is not changed
+ i6 v6 T7 w' P: ^3 D // indirectly by some other process).
; w* c5 \4 g/ m4 l# ^2 \ 1 |3 l4 E0 | ]# u
modelActions = new ActionGroupImpl (getZone ());
+ u8 ?2 a: u5 z/ ^+ k2 N/ t% }2 E0 C" t& f- [
try {1 ]! O, v/ H S z
modelActions.createActionTo$message
: ?5 t9 l6 d- \# e" O1 ] (heat, new Selector (heat.getClass (), "stepRule", false));5 }* ^9 n! T: {4 ~5 c4 P$ J
} catch (Exception e) {3 ^. n- @ o+ D
System.err.println ("Exception stepRule: " + e.getMessage ());
) V9 k7 D3 x4 J, D }) L1 r, D5 J8 D7 `: T0 W
3 j" S" }3 t7 b6 R. {% e/ a W4 _ try {4 \; f2 d x; G1 d
Heatbug proto = (Heatbug) heatbugList.get (0);
; O# c$ ?, C6 v" [$ M* M Selector sel = . q2 [% T8 m8 A
new Selector (proto.getClass (), "heatbugStep", false);
! ?4 T% P6 q4 L2 G6 U1 U actionForEach =
; _. Z5 ]2 ]! @+ X! v# L modelActions.createFActionForEachHomogeneous$call/ f/ z! Q( Y- V! X
(heatbugList,. ~/ N6 c. q3 e/ u# P
new FCallImpl (this, proto, sel,
! v2 y# j2 L: a new FArgumentsImpl (this, sel)));
8 E, m8 l$ a& S5 w } catch (Exception e) {7 t& o( j4 e4 j! o4 ^ D' `9 c) q
e.printStackTrace (System.err);. K# e8 Q# B* d* u
}
$ a6 d& `- P1 e: J$ }9 \
% {+ z. ^" U- p" I8 q2 `2 v2 D syncUpdateOrder ();/ v+ [7 J; I3 z& J* G( P9 E
; w3 Y/ i+ t! x9 W* x( u' m1 _
try {! e7 E& k+ t" E. Z
modelActions.createActionTo$message
. C* h* ~8 N/ ?9 v: R7 O3 n (heat, new Selector (heat.getClass (), "updateLattice", false));5 j7 U8 A' r% W
} catch (Exception e) {0 U$ G7 M% k: ^) [' }* l( F6 O2 G
System.err.println("Exception updateLattice: " + e.getMessage ());
9 G1 Z3 M% Q' T! w6 b2 l( y }; h. @1 p4 M( `
* E; r$ ?; z2 X" Q/ F& S4 b // Then we create a schedule that executes the1 j* H9 n0 I/ m2 ?
// modelActions. modelActions is an ActionGroup, by itself it& Z: c6 t& e$ G# B- ~0 J( V" N+ U
// has no notion of time. In order to have it executed in/ c1 \' l1 i& a, b& v5 F4 a9 w' t
// time, we create a Schedule that says to use the3 q+ Z$ P8 U- q2 L7 |* v1 p
// modelActions ActionGroup at particular times. This
* Q S, s. j- N; `/ N/ Y0 ^" ^, x // schedule has a repeat interval of 1, it will loop every
0 s, v. D9 N# w1 z/ A# ? // time step. The action is executed at time 0 relative to4 Z2 p+ Q9 ^, B; O3 `
// the beginning of the loop.$ ?' x$ D5 R a3 U
' t. B6 p+ H- h: U- { // This is a simple schedule, with only one action that is! w; x( T! r" G9 j7 H
// just repeated every time. See jmousetrap for more
: V/ }: p+ o1 r1 P // complicated schedules.
* T1 t* n7 _8 q
' }0 O$ U% e6 ?1 T d7 R$ T modelSchedule = new ScheduleImpl (getZone (), 1);9 N2 R+ x& V+ J4 U
modelSchedule.at$createAction (0, modelActions);+ |9 t9 k( I& O z: B+ w
5 K" `" L9 A% \2 d* N return this;+ g, m& w2 z1 B9 S
} |