HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 ?- i. A0 K2 }
0 q' n5 e# e/ t public Object buildActions () {
5 p1 k0 ]3 X3 t0 M+ d2 h2 j super.buildActions();
1 Z9 k2 b2 p/ n9 W, g9 { 9 B+ [4 z$ @2 q
// Create the list of simulation actions. We put these in
, _7 C2 s$ F1 r; M" v) _9 M // an action group, because we want these actions to be; |, d0 }/ w9 z' F3 f
// executed in a specific order, but these steps should" }0 U/ k6 T6 M% [$ w
// take no (simulated) time. The M(foo) means "The message
! f1 F6 V3 d! D2 G // called <foo>". You can send a message To a particular
! ^ P+ I q0 r! A3 k5 ?5 | // object, or ForEach object in a collection. n/ {! ]. v4 w, ^. ^( Q! Q, }
; f" l: K: `2 K& m
// Note we update the heatspace in two phases: first run( W: {# o8 k* m" W6 N4 k
// diffusion, then run "updateWorld" to actually enact the
4 s( G' M C7 g' I // changes the heatbugs have made. The ordering here is- C8 E' D- a. I2 B
// significant!
0 |. }: w, n; g, w0 o2 G; G
9 V& v. O& \/ [, o; i // Note also, that with the additional
3 C) @( y6 \; B- g2 J // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 W7 }. m2 B+ p0 ]$ l5 H, _ // randomize the order in which the bugs actually run& _+ d w; e0 ?0 H1 t0 J: @
// their step rule. This has the effect of removing any
7 X4 |* O+ E/ K7 v% i, g X2 R( s$ f // systematic bias in the iteration throught the heatbug
: a6 U# d8 p( [2 X3 G$ G% h5 z8 P // list from timestep to timestep
! v0 m8 o: d& C3 I( k3 S7 V0 y
7 a+ F) t, m7 @+ F4 o; r& _, a // By default, all `createActionForEach' modelActions have
6 t5 i( H) `5 g8 f* P7 M // a default order of `Sequential', which means that the
3 ^. m- Z! m- E' n# \% e2 Y // order of iteration through the `heatbugList' will be
7 H" r8 _( e9 e4 g6 L // identical (assuming the list order is not changed
/ b2 K) M, N5 |. g4 s4 }& e // indirectly by some other process).+ V1 |% a; y" |. v9 V" w: b
q' K( }* n3 g; m- b
modelActions = new ActionGroupImpl (getZone ());0 `( e, A: V' [7 f/ L7 t& Y
" F p! n+ C3 G$ w
try {4 S8 y6 A# W1 A' H
modelActions.createActionTo$message! j& Y7 |2 ]8 h* n# v* {
(heat, new Selector (heat.getClass (), "stepRule", false));2 L, j5 [1 M! n' b5 J" h8 D) c
} catch (Exception e) {2 D- f, W$ f/ Y
System.err.println ("Exception stepRule: " + e.getMessage ());" d& N( [1 N$ B% P% y
}
) }4 `/ m# t0 a9 x7 C3 G4 M9 `5 P) q, T" Y* j, r
try {: u# E% p, j7 r
Heatbug proto = (Heatbug) heatbugList.get (0);
4 C4 j7 D- \% A5 @2 e Selector sel = - `' c q& t/ r) X: k
new Selector (proto.getClass (), "heatbugStep", false);/ }' H8 \2 `+ }* k( o. ]: n+ ~/ N
actionForEach =# w6 U9 h8 e8 S+ c }1 \ p& N
modelActions.createFActionForEachHomogeneous$call
2 c6 \( g1 ]' b0 f1 Y4 B! T% K% O (heatbugList,
; _/ L6 K% C& d8 R4 T# f new FCallImpl (this, proto, sel,# C% p2 {, _ S( Q7 c
new FArgumentsImpl (this, sel)));
9 Q& @& i h! o } catch (Exception e) {" e; G( _( c. ~
e.printStackTrace (System.err); N3 d4 D# W; q* A8 _
}" k U. }0 X. E9 K( }' M3 _/ H
( |+ `0 d5 R/ R: ?; C syncUpdateOrder ();
( n9 Z6 ]' j' h, x
+ b Q6 U* a8 x% F3 N% O try {
( a/ Z& b8 W' I: |3 z modelActions.createActionTo$message
$ `$ @; e. |0 k: t, p e, S (heat, new Selector (heat.getClass (), "updateLattice", false));, f: _% \: Y- D2 j5 ~; n
} catch (Exception e) {
8 g# u% p9 X3 A/ Q8 B3 o System.err.println("Exception updateLattice: " + e.getMessage ());
5 W1 V( W7 ?: V6 T; {- c! j }, `: M* b2 b$ _- m
% R# n; k6 q3 B) t ~
// Then we create a schedule that executes the
2 T: ?/ k8 P, s0 d5 Y$ Y6 W/ [, _ // modelActions. modelActions is an ActionGroup, by itself it
! a4 K2 M0 \6 S7 r/ K j1 x // has no notion of time. In order to have it executed in8 b, f0 P7 K1 q5 G9 z" ?# \
// time, we create a Schedule that says to use the
4 l9 z( P% [# e. X, x* B& M // modelActions ActionGroup at particular times. This
& d# L1 d X6 i) v8 h // schedule has a repeat interval of 1, it will loop every% b1 S& V1 g( j, E, o8 n
// time step. The action is executed at time 0 relative to
' [3 D9 ]3 [; r$ W, d5 C# f // the beginning of the loop.
- N7 T8 R% W+ Y) F8 S3 x( o
- n% X, l) N% L- E) E9 Q // This is a simple schedule, with only one action that is6 h- V0 B0 t* D7 d3 y6 N: m
// just repeated every time. See jmousetrap for more
- J: a" D1 q( f3 s# y& Y% a6 h- F2 t: b // complicated schedules.
7 h. o1 ?) H0 \' O6 p0 ^% [
6 G* b1 ]: n: m modelSchedule = new ScheduleImpl (getZone (), 1);
e$ v# ?3 p' f; A6 c9 X! b modelSchedule.at$createAction (0, modelActions);
4 a+ y+ k% T& `) a8 c. j8 ] 9 a& H4 }8 @5 u, |$ ^) V9 I
return this;$ r4 x0 `7 x; D- o: Q) b) ~
} |