HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( X- T7 N8 _% X; E( Z) C9 u+ D
. D- n! c/ R' C/ B6 e5 W
public Object buildActions () {
, f9 z) ?& O* S6 S super.buildActions();& T8 z' R2 ?5 D' c' z
3 m# Q# \6 y L+ h [ A- S
// Create the list of simulation actions. We put these in4 G4 l( t! p: x4 A$ _
// an action group, because we want these actions to be, G7 T' m9 {; d3 U! U) m9 _, T7 j
// executed in a specific order, but these steps should- s' q. { T! N
// take no (simulated) time. The M(foo) means "The message
5 \% t& w" B" a- k3 y" Y2 z) t // called <foo>". You can send a message To a particular U' C( L/ T# U. T/ H4 I# E
// object, or ForEach object in a collection." l+ _: m! y% w0 g: L- e
$ y8 h% h' K! I // Note we update the heatspace in two phases: first run ~* Y* O: U' ^8 w/ Y
// diffusion, then run "updateWorld" to actually enact the8 r$ N5 @3 @7 |. T9 Q* [( h
// changes the heatbugs have made. The ordering here is
5 I) }- e$ f! G9 o0 e# C, E // significant!+ X4 y% E$ X$ L& j
; v s1 H6 c) ] q+ _( A {
// Note also, that with the additional1 t1 C- }3 y+ f3 P6 y1 _2 N) }
// `randomizeHeatbugUpdateOrder' Boolean flag we can9 O9 e8 N: g; |
// randomize the order in which the bugs actually run2 Q2 w' ?# p6 @3 @( r0 H
// their step rule. This has the effect of removing any3 W4 |( B% X9 t' S* L
// systematic bias in the iteration throught the heatbug
- k$ t+ \# J) C) M) v. u5 v; F // list from timestep to timestep
q6 @% g. @" D2 s( X' e o! F
% O" G, _" k/ `- D* i // By default, all `createActionForEach' modelActions have& c0 b) b, X# i. y( N: R
// a default order of `Sequential', which means that the- v H) v7 j, D3 O
// order of iteration through the `heatbugList' will be* C, \% b( g8 @# s; Q7 H; E
// identical (assuming the list order is not changed
# r. |# F1 }- ? // indirectly by some other process).
/ H, q, g9 W+ O9 D2 Y8 r% D 4 R( ]$ z3 L# m$ H. ~
modelActions = new ActionGroupImpl (getZone ());) i1 n# Q' {. c a% H8 u0 d: Z1 ~
1 |- V7 Y) g# j( j2 A! }1 ?' o try {" L. D+ [1 R2 i* ]. P2 m" U; S2 x' E
modelActions.createActionTo$message
2 ]4 K9 I: y- L. b (heat, new Selector (heat.getClass (), "stepRule", false));
5 v& G3 W& r l } catch (Exception e) {
/ p2 ]# s. U0 x$ D System.err.println ("Exception stepRule: " + e.getMessage ());
* b, g" e2 I$ I, B% [7 R) g }
; ?* T* D1 B/ h9 ^; s I8 S+ S+ R/ B/ `5 {8 g/ S
try {% l* g0 x( \6 t/ {" r8 B& i
Heatbug proto = (Heatbug) heatbugList.get (0);) Z& x& q# ^: T, t
Selector sel = ) A* w+ K3 e4 n: d& K1 j, \
new Selector (proto.getClass (), "heatbugStep", false);0 y% X- o* U4 e! q
actionForEach =/ T- x& k! ^. I
modelActions.createFActionForEachHomogeneous$call
4 Q+ \/ X8 S9 u# y1 J (heatbugList,
5 b) i* u6 H! k& e6 K new FCallImpl (this, proto, sel,7 {/ d7 _- G7 b7 }8 z
new FArgumentsImpl (this, sel)));
% ~; i, a7 G5 K- {9 z } catch (Exception e) {
: c: _, [+ F4 m" B e.printStackTrace (System.err);
6 v- A% Q- a1 Q" a. K! t' t }
% C, z7 i' f7 D% V
! b2 v, r6 p5 Z+ P( V syncUpdateOrder ();
$ m- U: a: o8 B" [% z5 t2 o
0 \4 ^2 }! \; q1 t4 V& V try {. c b. P* \2 `
modelActions.createActionTo$message # T& `. Z, {3 F& E8 g
(heat, new Selector (heat.getClass (), "updateLattice", false));
" P) R4 [8 c; I* A) d } catch (Exception e) {2 y/ y* Y1 `5 W3 j& F
System.err.println("Exception updateLattice: " + e.getMessage ());5 B; l# G- q2 F0 i/ [2 ^
}5 _5 y+ |# Z) ?* b7 t' ^' r3 b
8 q, O; E: e4 n: w$ Z
// Then we create a schedule that executes the: K6 E& N& Q( k% S O. E' t
// modelActions. modelActions is an ActionGroup, by itself it
' P% I/ [' {2 c& n5 h // has no notion of time. In order to have it executed in
7 H% X+ ]2 ?: b* B* u) n& a // time, we create a Schedule that says to use the
5 s2 X2 s* X7 O$ R" y# S // modelActions ActionGroup at particular times. This
, G1 N X# S* M+ m // schedule has a repeat interval of 1, it will loop every
2 R& A. V9 z# h- W0 Q8 D. `5 R5 C& \ // time step. The action is executed at time 0 relative to0 [# }: f; S9 H" b
// the beginning of the loop.
' [2 t* k K& _: V, p
1 ~( _- l: U. A" p // This is a simple schedule, with only one action that is
) T/ [. l- t% l5 j& e) V; ~ // just repeated every time. See jmousetrap for more
6 Z8 e& m F$ t5 n, I // complicated schedules.5 l7 `6 ], p2 G) z9 \
% y! w$ v* l' [ modelSchedule = new ScheduleImpl (getZone (), 1);
) `. S1 c+ A* a9 t0 f% j- N, I modelSchedule.at$createAction (0, modelActions);. j, X, ^0 J$ R4 u9 q. n
6 }$ E' y; h5 w% v return this;
0 m5 b, r/ F! @# a9 _ } |