HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) z) R( ^0 G' P; F" T# c
2 {5 W3 i- y3 i1 e$ q
public Object buildActions () {
0 V; Q" a' s. ~" F super.buildActions();
3 w5 J6 h* t8 X+ x0 I 5 o. ?# b/ w4 B0 _
// Create the list of simulation actions. We put these in
2 |. i) y$ ^8 ` // an action group, because we want these actions to be; f1 ` B9 U4 y3 F, \/ y+ g
// executed in a specific order, but these steps should; E/ ]& w5 T4 P! q$ I" C$ ~. W
// take no (simulated) time. The M(foo) means "The message
6 N7 q) h# Y; X# |! T // called <foo>". You can send a message To a particular
4 a9 C* W. I3 ` // object, or ForEach object in a collection./ W8 O' X1 l$ V! x& U% o* ^8 X$ ?
6 ~$ G9 H+ B1 O, V
// Note we update the heatspace in two phases: first run
/ j9 y1 f0 X; r+ R6 F4 x/ i // diffusion, then run "updateWorld" to actually enact the
: _, B" \5 u$ L8 J% \6 \ // changes the heatbugs have made. The ordering here is- V7 _* v9 }* I: _- S1 V& ~2 w
// significant!2 i9 ^) u/ ]8 K2 J$ m: V, v
! [' [& f, F# m$ ]. k
// Note also, that with the additional
/ ? V3 o4 K r% G5 o+ H // `randomizeHeatbugUpdateOrder' Boolean flag we can7 w F# W k7 C8 p+ e: f! X
// randomize the order in which the bugs actually run
% G C6 s7 I) H: y+ m: d // their step rule. This has the effect of removing any
* P6 n: ^# S+ H; W! s. u) [ // systematic bias in the iteration throught the heatbug
4 |5 Z2 Z- R: G) X' {) R // list from timestep to timestep& I5 }) U2 l& ?6 I3 L# |' D
7 o( O H/ P- T* w // By default, all `createActionForEach' modelActions have; t. C& i0 H( ?& Y6 x- [# I3 [
// a default order of `Sequential', which means that the
# i2 v' ?# o* U( M. d6 ~' ] // order of iteration through the `heatbugList' will be d8 s7 R) i+ g
// identical (assuming the list order is not changed# N( N9 [- i$ C0 t( `6 |' H
// indirectly by some other process).
% L7 ~, {( ^' k+ f( G: s t2 U" A
6 j; A$ \4 | _* }" E modelActions = new ActionGroupImpl (getZone ());
3 b" F, x) r* @* i3 R3 Q
: O' B3 N; o/ G try {# y$ f# i- Q7 D
modelActions.createActionTo$message8 | _9 H8 r" f
(heat, new Selector (heat.getClass (), "stepRule", false));
: t# y9 I# F& g1 B1 L) q4 N h } catch (Exception e) {1 R0 i8 o; i' j+ I$ Y
System.err.println ("Exception stepRule: " + e.getMessage ());! a0 [- M( C* M( _) M
}
4 F' _5 `2 \5 J. r4 {
9 J3 _! W# B" x try {
7 [8 l0 q- r& x6 e1 J Heatbug proto = (Heatbug) heatbugList.get (0);
/ |% y4 B- ^% L/ V5 Y Selector sel =
- B- l% |2 J) K. [! f8 k2 V Q. d$ w new Selector (proto.getClass (), "heatbugStep", false);: S2 M8 f) @* o& Q
actionForEach =
, ^( {$ U' O) T$ P- w modelActions.createFActionForEachHomogeneous$call0 [) ]: V' W% b) L+ J! [
(heatbugList,. n6 c& Z; ?4 J& P6 K
new FCallImpl (this, proto, sel,
- u& P8 \# G/ t2 ?8 t. Y4 H new FArgumentsImpl (this, sel)));& T+ f) z5 T" D/ A1 d7 E
} catch (Exception e) {. H& u( j8 e |4 |& H8 ?2 P
e.printStackTrace (System.err);
' D& C, |; m9 |/ j n }' s2 O1 r+ o# W0 V! e! I5 k7 Q% Z
6 p; i9 W3 _) L: m8 ^2 p v" n9 s8 w syncUpdateOrder ();/ z g/ d7 J# w' A& c+ r
# `7 N( g. T) r1 Y* B try {" y Y3 c: ~' G, P; w
modelActions.createActionTo$message " S3 [2 I6 F8 ^' V* E, f2 M
(heat, new Selector (heat.getClass (), "updateLattice", false));
* `. K# x8 R# s6 t. ?6 n } catch (Exception e) {/ s- p$ H0 d9 v. @2 i$ _4 u
System.err.println("Exception updateLattice: " + e.getMessage ());
9 j% G% W8 v) H0 l5 [( N1 L. ?6 l }2 c j% v7 h! @$ ]! t+ M/ `& r% ~
6 H% ?0 z5 |) v: a# ^0 f // Then we create a schedule that executes the& d' G; h! z4 ?, \ P
// modelActions. modelActions is an ActionGroup, by itself it
' X2 r2 w! r& {/ o, P1 t: v. Z // has no notion of time. In order to have it executed in
2 g, L' T- p& e" T7 v // time, we create a Schedule that says to use the8 C' ^8 ^6 C4 l: X. _
// modelActions ActionGroup at particular times. This
- i; F! r7 m% c/ H // schedule has a repeat interval of 1, it will loop every
# `+ n5 \" Q' N# d1 D: f // time step. The action is executed at time 0 relative to% \, U3 `" j [; J8 ~
// the beginning of the loop.
0 q9 N7 [# Z* t8 Z4 z/ Q
/ y2 H( A2 X' [) l1 ^ // This is a simple schedule, with only one action that is
' ]# t% i. D' M% S; |3 N // just repeated every time. See jmousetrap for more# p" {1 Z" {+ a" F
// complicated schedules.
. P3 X( [+ U. B& c# E3 Y% M
& C- |; k# s2 g+ U modelSchedule = new ScheduleImpl (getZone (), 1);: e( y! B; q( x) ]8 r+ m) D, w( D
modelSchedule.at$createAction (0, modelActions);1 |8 L7 p$ @% j
5 t! X2 M) |/ P1 D ]
return this;
0 D _, m7 e2 B6 j3 P } |