HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( x3 X' ~$ B) I* S7 C: }" @4 J; c8 {' r6 z, O5 q( \
public Object buildActions () {+ U# p& H. K% r0 G* ]* |$ q- T
super.buildActions();
) k0 I- A3 n. p+ b. e ~& h" e8 f" x* D* ~' g' C
// Create the list of simulation actions. We put these in
8 h7 }% j4 a! ^; B' l5 e // an action group, because we want these actions to be" G' W/ b4 M8 k2 B5 p y1 ?' q
// executed in a specific order, but these steps should) X+ F; Q# U! {: } ]9 H. v0 B
// take no (simulated) time. The M(foo) means "The message
2 \ Y. e% G D // called <foo>". You can send a message To a particular3 U4 k7 z3 ]* t! O6 m
// object, or ForEach object in a collection.
$ k0 K* M$ o6 h" J& Z
, l- I& w2 C% M4 D0 t4 s$ l // Note we update the heatspace in two phases: first run
, x& E9 g% C' S) m( f6 U // diffusion, then run "updateWorld" to actually enact the
* ?8 c* e* {8 m3 f' y2 z+ R // changes the heatbugs have made. The ordering here is- E5 A9 w0 K) p0 D9 a, g. x
// significant!
2 A) R) J" E* f' o
0 P& v+ Q& F) O3 [0 p4 k" `/ m& u // Note also, that with the additional
9 \3 [7 U* ~5 _7 Z5 @ N // `randomizeHeatbugUpdateOrder' Boolean flag we can. A. L6 z3 t8 M- t& C8 V( y1 R: g7 V
// randomize the order in which the bugs actually run" q, t, D, a8 H: }/ Y: h4 U
// their step rule. This has the effect of removing any: k4 \5 [- [/ L; d" O) [4 ?% X3 R
// systematic bias in the iteration throught the heatbug4 A' I4 h/ h+ q: F$ k
// list from timestep to timestep7 T$ C- }+ g! C. n- m( K
2 A" G! y/ p+ C% H // By default, all `createActionForEach' modelActions have
5 N0 B. u$ y7 d // a default order of `Sequential', which means that the& Y. {! @& E& E6 d! v) {# S
// order of iteration through the `heatbugList' will be* K- ]6 ^& e$ Q! {5 G% Z
// identical (assuming the list order is not changed
' J4 u6 @1 {* F8 t# ^. d- Q // indirectly by some other process).. |+ G8 F2 a% ]$ a0 `$ U
. s; _; g7 L3 f
modelActions = new ActionGroupImpl (getZone ());
7 M- i r6 I0 x, t+ ~+ H" c3 T9 b) I. \: j1 ?0 N3 j
try {2 U; C% }5 a% r9 i
modelActions.createActionTo$message
_/ C$ Z W3 M$ V" y+ A3 S* w- `. a (heat, new Selector (heat.getClass (), "stepRule", false));: k/ s: k& u9 `0 U" Y) n
} catch (Exception e) {
0 a4 c" P- g8 ~4 [+ C System.err.println ("Exception stepRule: " + e.getMessage ());
# j! S1 o7 {' d/ [3 z0 o }
+ o2 o( h7 D6 i4 S) b% D* b* ~% A& P4 S A3 H
try {( P# Q, S. m0 W1 o1 m
Heatbug proto = (Heatbug) heatbugList.get (0);
! I4 d6 `: `! Y" P# f" W0 V9 @ Selector sel = 7 h1 S Z: z( b8 v
new Selector (proto.getClass (), "heatbugStep", false);
8 G8 ]9 f% q3 ]; G& m- t! n actionForEach =1 m; B2 L, L- ~! [0 H
modelActions.createFActionForEachHomogeneous$call& i! p0 }+ }3 [0 U* h3 A1 F" ~) j
(heatbugList,. S9 `3 N! a) ]
new FCallImpl (this, proto, sel,7 q, p, V2 o5 X- i
new FArgumentsImpl (this, sel)));
, t `4 ^% j$ B+ u9 B- x3 @ } catch (Exception e) {
, d1 \: U( `; _+ D' N. O, `# M4 s3 E e.printStackTrace (System.err);8 [7 B+ d W3 m3 i' d4 z
}. I1 t- r; V! t8 G5 T- K3 K+ J
% S* ~+ f) h }8 `& X syncUpdateOrder ();& ^3 s( V: K1 e/ @$ }
) M2 `* ], S3 W" D: K+ ] _ try {) t! ^0 d- R7 v( j% Q0 f- f
modelActions.createActionTo$message * L5 b; {. a$ R: o9 n
(heat, new Selector (heat.getClass (), "updateLattice", false));8 E! F3 j K7 Q3 H
} catch (Exception e) {
4 [, ^" T G G1 Q* H! ]2 Y7 Z( z/ h System.err.println("Exception updateLattice: " + e.getMessage ());
. `4 t9 g. e3 {1 t' @1 i }
$ R) t3 b8 [; G# L5 [( C+ J9 O0 P+ @" A9 o
, n# {3 {0 B5 O; B( G; z' [ // Then we create a schedule that executes the. z# C0 h' i* F% l2 j
// modelActions. modelActions is an ActionGroup, by itself it
. H% p$ ~: k, T // has no notion of time. In order to have it executed in
7 W/ E! \& V; v0 J6 t9 W // time, we create a Schedule that says to use the
$ G0 i; |% t& p( Q) k7 c // modelActions ActionGroup at particular times. This! u- \7 S; J. k. R/ d" H* n" m
// schedule has a repeat interval of 1, it will loop every' X: e/ S5 w+ r1 N; q; | i
// time step. The action is executed at time 0 relative to
" l ~ s' X. [0 t8 K // the beginning of the loop.' }) r6 U7 Q: P' b, |
$ i R1 d- @( A0 [5 j1 E- J4 P
// This is a simple schedule, with only one action that is
7 B, e8 v2 \5 J: N( ~1 A // just repeated every time. See jmousetrap for more' d7 r0 M6 o7 G+ U
// complicated schedules.) \# ?1 D9 D- X6 ~) [
3 i& g2 [% p. ~% e+ d modelSchedule = new ScheduleImpl (getZone (), 1);
' c. W/ S7 n: j9 I+ ?5 H( K7 U( O' V modelSchedule.at$createAction (0, modelActions);
( Y& I$ | \" }) K- j 8 r, b9 d% v7 ~9 Q4 ?* G
return this;4 C. D# {9 p% t
} |