HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
4 {- `* h, a& p5 K- t) {( Z- b
% x6 p4 |( q/ Q* W: v public Object buildActions () {
/ Y- @! m( a/ J. O ^ super.buildActions();/ `' B% t# X. r. x& Q
2 E$ J, h7 m! S
// Create the list of simulation actions. We put these in; t2 Y3 R5 T1 j- R
// an action group, because we want these actions to be/ ]* @1 c% e! w$ J. r
// executed in a specific order, but these steps should
: v; ?1 X6 `1 g, X) |2 g; V; {; |9 @ // take no (simulated) time. The M(foo) means "The message
8 {) G2 J" d" c' x' j // called <foo>". You can send a message To a particular' l, y e" ^ l3 S* }
// object, or ForEach object in a collection.
$ y4 i9 P Q v8 p2 t/ r- ]- \
& ^0 A, j5 M1 L0 f, h // Note we update the heatspace in two phases: first run
/ W5 \4 T( f- t3 \; P // diffusion, then run "updateWorld" to actually enact the
. W$ h' k) q/ F( f/ e+ l, o // changes the heatbugs have made. The ordering here is+ M7 \% l* _8 Z5 A4 {
// significant!" j/ X' c7 g. |0 w$ j5 J$ K
' v; l+ R* ` J- s8 W: | p9 @
// Note also, that with the additional
7 M/ D8 C" z1 ^" \, a // `randomizeHeatbugUpdateOrder' Boolean flag we can
+ z* [, d, ?% g& h& r. N% W9 ~ // randomize the order in which the bugs actually run
( _7 x! t% M: y) \ // their step rule. This has the effect of removing any
X9 W1 V8 c% u7 N. U4 t // systematic bias in the iteration throught the heatbug
1 a1 {% w! ^8 e& G, `; Y // list from timestep to timestep
+ o0 d% N0 P& h; a- Z) m# [: @4 R3 y / Z' U9 F: h. g; j& x
// By default, all `createActionForEach' modelActions have6 B8 Y! d- Y6 |) K" p
// a default order of `Sequential', which means that the1 \/ R) c; d' C
// order of iteration through the `heatbugList' will be% h) {0 Q# X' b8 z* u
// identical (assuming the list order is not changed
; t1 E/ y0 m% o // indirectly by some other process).
: V9 x- ?! h* [ 6 C( _( |( c' Q9 Z: a
modelActions = new ActionGroupImpl (getZone ());5 M& C0 y. r5 p* a4 B* @( j
8 C6 z& L1 H, [$ L4 T3 W
try {8 Y3 N, O. D) ]& V
modelActions.createActionTo$message& I: b' K! }7 g4 L3 g% v) a9 b
(heat, new Selector (heat.getClass (), "stepRule", false));9 v$ n. k" ^7 X- _( H; B8 k5 Y
} catch (Exception e) {6 @8 n& J7 `' y2 r
System.err.println ("Exception stepRule: " + e.getMessage ());
; C8 z: n2 y& X3 q }& ?" k' x& @1 R( `. S( e4 ^
8 C4 X! J- B% M$ K try {7 Y7 }! o' B5 \7 Y
Heatbug proto = (Heatbug) heatbugList.get (0);+ p) i) w8 ] Y5 g) a
Selector sel = 6 `+ v4 p& T. r( B
new Selector (proto.getClass (), "heatbugStep", false);. U5 d, [, C% ~
actionForEach =6 K( J, e! m2 ]2 g6 [/ S" l% v% P7 L% R
modelActions.createFActionForEachHomogeneous$call
: g+ i( S4 Q7 I. _8 a& E6 l* U+ p (heatbugList,: e7 X5 l: K' h: e
new FCallImpl (this, proto, sel,; L/ J0 ?# c* Q
new FArgumentsImpl (this, sel)));
* \: R8 X0 l$ K1 a0 F } catch (Exception e) {
% r/ L2 M" [% m" _, ~, J e.printStackTrace (System.err);
5 @9 W; O' K* T" p% a }% L& `; D l$ X1 O% ?
. Q9 V/ a8 K* \' P syncUpdateOrder ();
! z. k. B" O+ z0 z& S
3 ~. l8 P# E( Y+ K! u try {* L; A6 @" B$ r
modelActions.createActionTo$message
; L9 k9 ?9 c+ P+ R0 G1 [! q: G3 K8 W (heat, new Selector (heat.getClass (), "updateLattice", false));! p& Q- A2 |5 g4 C1 [ q+ U4 O
} catch (Exception e) {
7 G! s, C9 y# f+ a% } m: H, a System.err.println("Exception updateLattice: " + e.getMessage ());
1 t- u+ U" f, g9 A }5 s; I' y& @5 A
2 g& t9 C8 \5 e. Y2 p" h // Then we create a schedule that executes the& X4 E3 W# |0 b; v) P* u. L8 x
// modelActions. modelActions is an ActionGroup, by itself it+ x/ A: \; t3 b! \8 u/ S
// has no notion of time. In order to have it executed in# W5 ?9 E" O$ t% F. U1 a+ n9 N3 m k
// time, we create a Schedule that says to use the8 v* `# k) {# L# W' H1 H3 s, U9 N0 m! F
// modelActions ActionGroup at particular times. This
& v8 I& w/ ?0 l // schedule has a repeat interval of 1, it will loop every
" l9 P) X' x0 m% ~" I' {- d; O2 Z. R: F // time step. The action is executed at time 0 relative to* K7 j, Z* h5 |9 L3 B1 Z$ X
// the beginning of the loop.
# X; _, T; D0 a9 k2 N/ ]% |% o) q. m' y& p/ D C5 `
// This is a simple schedule, with only one action that is
% D, C* x/ P- O$ Y" N7 q T6 N // just repeated every time. See jmousetrap for more
3 {7 I* O G/ [" e // complicated schedules.- Y- L, l2 c0 k' Z' E
' V m4 J2 j7 L modelSchedule = new ScheduleImpl (getZone (), 1);
, H; o6 v' b( { modelSchedule.at$createAction (0, modelActions);4 O( ]; e# T% g4 T O
$ E9 {6 }! t% o return this;4 G- t! @0 [8 v: l8 R) ?( a
} |