HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ c/ q% A0 E3 j; Y
# C c9 _ d* |6 d8 k4 i* @4 d public Object buildActions () {
8 r' P+ A4 q3 k& S super.buildActions();
& |2 N t+ B A" c6 u9 b; x
4 l1 K y5 B. y0 s3 s0 m // Create the list of simulation actions. We put these in" G6 D3 ]) N6 B4 ^* |
// an action group, because we want these actions to be3 C9 ^$ j( q+ g
// executed in a specific order, but these steps should! m5 C0 N2 u% V0 Y9 W; S, m
// take no (simulated) time. The M(foo) means "The message$ t' l3 X* l: ?3 R& E1 t" U2 z. W' u
// called <foo>". You can send a message To a particular
5 u* b- D: o3 {' _ // object, or ForEach object in a collection.2 D: \( J: I( Q0 f* u- r% l7 R1 d
: t' k( K# B6 f6 Z1 _ // Note we update the heatspace in two phases: first run
6 t3 t1 _5 @6 h6 p5 _* ]0 |2 w // diffusion, then run "updateWorld" to actually enact the
% F5 I z, i0 i: g: k* d. n // changes the heatbugs have made. The ordering here is
0 y5 a( s4 @: o& S2 S // significant!
1 h# {1 Z8 U7 N' ? ! I) P- d1 _5 V
// Note also, that with the additional
, m0 D0 I6 M. c/ v' G, h // `randomizeHeatbugUpdateOrder' Boolean flag we can
/ G4 m0 d h3 K // randomize the order in which the bugs actually run" z2 m9 k4 Y8 G1 m1 b
// their step rule. This has the effect of removing any7 `4 w: M" l! W
// systematic bias in the iteration throught the heatbug
R7 U( @7 J/ \2 r3 N' L // list from timestep to timestep
R8 ~0 W3 v# p5 i ]
. G, w" a7 @. y P$ m // By default, all `createActionForEach' modelActions have. l- B9 Y. H' P, e
// a default order of `Sequential', which means that the
( N1 c+ U# S: Z+ B Z& { // order of iteration through the `heatbugList' will be
4 D/ p$ K1 i; d3 j // identical (assuming the list order is not changed
! d9 ~; d5 R" t* y, }. } // indirectly by some other process).
. o0 K+ Y m6 a; Q4 w: W& v) L! t
8 K7 x* p3 E1 V4 s& o modelActions = new ActionGroupImpl (getZone ());
+ [7 e- }5 w+ n' O5 K
/ F, ]( @1 {9 i7 ]( Y1 u- V4 Y try {3 h H3 B, k0 C/ L" f- i& F
modelActions.createActionTo$message1 X6 h" _( V0 e# s5 [& s
(heat, new Selector (heat.getClass (), "stepRule", false));% B" t- ^9 Y) B- w# C3 a
} catch (Exception e) {7 H: F' @2 ]6 W% C0 c
System.err.println ("Exception stepRule: " + e.getMessage ());0 X; o+ s& s7 ^' c
}4 O: L# F3 u1 m
5 f* X( j, d$ Q5 x @ try {
5 ]. T, k E7 b Heatbug proto = (Heatbug) heatbugList.get (0);
% y# Q; w" H, V Selector sel =
( r/ g, W1 |# n$ k new Selector (proto.getClass (), "heatbugStep", false);
1 }1 E+ e2 G, G M# Z actionForEach =
' E1 j8 e9 W) M, k' u& E" k; O1 O modelActions.createFActionForEachHomogeneous$call
6 Z `: ]+ `: ]" {( h7 Y, k (heatbugList,- d; \4 }. l$ u& @
new FCallImpl (this, proto, sel,* Z6 v, p' Y, x* b5 m. F) X4 M' }
new FArgumentsImpl (this, sel)));
! O7 s8 g5 q7 |8 T+ O2 F9 Y$ |; ?* b } catch (Exception e) {
# ^) K9 u) d; r o/ ? e.printStackTrace (System.err);" T# T% v& e3 n H/ v! o& B4 [
}
{1 b3 e- V% E) {
6 R$ G2 }& X- X. O$ ~5 n8 Y syncUpdateOrder ();
1 V( c$ x% _" h- A7 j
6 k7 w) E& s' G% C) H3 Z1 Z try {
4 \ G8 ]% C: n& \$ [+ Z modelActions.createActionTo$message
& @% t. I, c* ^# _ (heat, new Selector (heat.getClass (), "updateLattice", false));
+ }1 z% e/ `5 d$ h: B } catch (Exception e) {
+ Z$ m: L% Q. {% ~2 D* e/ G System.err.println("Exception updateLattice: " + e.getMessage ()); W9 z- [$ B. |2 f
}: J: A$ @# `. _! \7 [! D# i7 x$ `
0 ^- U$ C) y$ y! N
// Then we create a schedule that executes the
% f. v/ s/ n6 o // modelActions. modelActions is an ActionGroup, by itself it& _+ x5 `& ~+ w& \) E1 _
// has no notion of time. In order to have it executed in
0 C N; U9 v- F6 L# b% O // time, we create a Schedule that says to use the
% p. G/ ~9 g$ V( o9 r& d // modelActions ActionGroup at particular times. This
' V+ g7 q9 N% m6 ^4 A' g7 y // schedule has a repeat interval of 1, it will loop every/ ? ?8 O$ l4 E: T, a6 m; x+ C' Z
// time step. The action is executed at time 0 relative to# w& h9 o! I$ v5 l" |
// the beginning of the loop.
. M* D2 ~! @0 E4 ?
& t$ C* a. _) \4 R // This is a simple schedule, with only one action that is" i5 y0 |6 e6 U+ E
// just repeated every time. See jmousetrap for more9 A# N# _; `; M6 ~
// complicated schedules.
* I* j/ M8 ?! e1 U ) ^+ [, R/ S6 q5 o# ]: k
modelSchedule = new ScheduleImpl (getZone (), 1);& `; T/ {- m" Z( {: z( O
modelSchedule.at$createAction (0, modelActions);0 i: U* P/ z6 P: y' i; L
- ^0 |7 m. h0 T$ k' K% D: S4 N; W
return this;& n4 f1 L" [! ?7 F; T6 D0 {
} |