HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( c' @, _7 R9 j; E
9 t$ i* s( J9 H' q4 Z( f) L! T5 \ public Object buildActions () {
8 v1 S2 j% y4 F7 d4 A5 G$ w! z( F super.buildActions();
7 P) z5 {4 b6 K( l
2 ?+ D& ~1 k4 U9 k; W- h- H5 a- J // Create the list of simulation actions. We put these in
4 [7 Y* I6 ] t // an action group, because we want these actions to be- n7 g8 D5 m0 {# W- C* f
// executed in a specific order, but these steps should
& @* k I5 }0 ]7 V! y8 J9 x // take no (simulated) time. The M(foo) means "The message/ L8 w! N6 [! p6 L9 p% h0 n3 j
// called <foo>". You can send a message To a particular4 g4 M+ c) H. C' j8 }$ t
// object, or ForEach object in a collection.
6 E, b$ e! X( x p7 d; v
# {) J: c% N$ L$ ^. ]: Y& j // Note we update the heatspace in two phases: first run
$ C1 \% E* c) K3 Z // diffusion, then run "updateWorld" to actually enact the9 w2 |: f0 a, |
// changes the heatbugs have made. The ordering here is
: p: D- n: G9 K+ X+ Q$ \( r" G // significant!' |* R& z( e5 T9 `$ U" W5 A7 E
2 M2 h' @" G6 @' Y9 ]. b // Note also, that with the additional
$ t! r" `5 q" e/ u! r7 z7 a // `randomizeHeatbugUpdateOrder' Boolean flag we can7 {" j! |; D* u" T3 k
// randomize the order in which the bugs actually run* ]1 r% u9 z/ z
// their step rule. This has the effect of removing any4 [3 @" p) O) i9 r9 Z
// systematic bias in the iteration throught the heatbug$ d7 }/ g. q6 |0 a; W+ I0 e+ G
// list from timestep to timestep
5 F/ X( o0 T3 v+ Q7 B
) ?4 i6 E n2 C" N: x // By default, all `createActionForEach' modelActions have2 _& O: Y. |9 l8 o1 v
// a default order of `Sequential', which means that the6 \: W9 [- h; R" W, H
// order of iteration through the `heatbugList' will be
0 q+ G' v# g1 |$ {0 S // identical (assuming the list order is not changed
: u! [3 f) O# [8 o$ V# H // indirectly by some other process).
9 n& \# n) q! n% I/ l4 _ , h' G' M6 x/ _ h
modelActions = new ActionGroupImpl (getZone ());2 g$ k2 v' B; U6 x, {( x
- C& r6 @( C% g' G
try {
H- r& R9 n6 A1 ~ modelActions.createActionTo$message( l4 r0 l/ d! R* F
(heat, new Selector (heat.getClass (), "stepRule", false));' P3 N% f: i2 T% x
} catch (Exception e) {" e& f/ [, m. }0 g% {* W) i
System.err.println ("Exception stepRule: " + e.getMessage ());
: C6 k4 ?1 U% _* O+ I }
$ A; N8 M+ X) E
- J x, A% }$ t5 |5 S try {: u' X" {# B+ @* M
Heatbug proto = (Heatbug) heatbugList.get (0);- }+ K# x4 m& o5 s
Selector sel =
) l2 G0 h9 n7 N9 m3 g& i7 C new Selector (proto.getClass (), "heatbugStep", false);$ j0 Y K* h( W2 c8 {; B
actionForEach =
" d, g5 ]& F' ^# k( ] modelActions.createFActionForEachHomogeneous$call
% u' L: T& } H4 p# I; c (heatbugList,) }! t! j$ l+ ^1 n C
new FCallImpl (this, proto, sel,
' P7 H! f6 o# Q& l K4 C! k- |" g new FArgumentsImpl (this, sel)));- _% O& p$ e2 _$ k3 _
} catch (Exception e) {
& |8 `& v! h X, o8 S& d e.printStackTrace (System.err);8 Z; O+ m4 _& o1 X3 Q. }! R
}
# u U# E* b# V8 | 4 O$ W1 x- ?5 ^
syncUpdateOrder ();
+ t0 A3 N& }3 R; T$ A6 T! Z1 S
" z1 B p. _. Q5 Y try {
$ \3 F5 v/ H* J0 a: v* T. W9 p$ Z modelActions.createActionTo$message
3 H N5 ?2 y: k$ T. v9 ~* [ (heat, new Selector (heat.getClass (), "updateLattice", false));* H& \5 @% q( j
} catch (Exception e) {
- A/ m" M7 E* b5 j7 I System.err.println("Exception updateLattice: " + e.getMessage ());
0 u) ~3 K' z7 Y1 L }6 W7 u; m$ _' Z
- d5 G& B1 J( a( _# z l! \, _ // Then we create a schedule that executes the1 Q" t+ y+ K8 B+ o
// modelActions. modelActions is an ActionGroup, by itself it
. ^6 O! L2 c6 ?- [2 B0 F // has no notion of time. In order to have it executed in" w; A" `4 D; T# ?6 z; x. R
// time, we create a Schedule that says to use the1 V& u5 Y& ?! x0 y; V- Q' r2 G# n
// modelActions ActionGroup at particular times. This
5 Z: t2 t0 F. K9 S ]. W. b // schedule has a repeat interval of 1, it will loop every2 S- Z& r% \6 ~+ y% ~7 T
// time step. The action is executed at time 0 relative to
2 v, b( |9 A6 D // the beginning of the loop.
* H) l6 h4 d$ J! S0 S" O1 R
9 K5 q1 y! ?, f- _. u // This is a simple schedule, with only one action that is
0 f; B" |/ E& j2 C // just repeated every time. See jmousetrap for more! [9 O9 o6 f9 f7 a: ~) e8 k. u3 o
// complicated schedules.
9 [4 F3 R, i! Z. l* I5 }
( j" ?8 T0 Y& ? modelSchedule = new ScheduleImpl (getZone (), 1);
) S: {$ j G. d& B3 S modelSchedule.at$createAction (0, modelActions);
% |! V6 I$ G, A: @% k# N
+ m3 o+ e1 M6 t! e4 W. k return this;
, d' `( T+ s. V7 p" U1 s1 x' V! ^ } |