HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% v4 r$ r. P; y% q& x2 T4 h% y! g) H# \7 ^
public Object buildActions () {- {6 _0 I S8 H7 m7 c2 C
super.buildActions();
6 r- Q% o4 Q$ e! e3 [9 D
; n, ?2 _) r7 W3 q" h) V // Create the list of simulation actions. We put these in
( {+ g( u! s; \) o# U) B // an action group, because we want these actions to be8 y- j |. M' ^3 A6 m$ O4 K6 n o! c* e
// executed in a specific order, but these steps should
4 m4 s/ K- n' ?! \$ F // take no (simulated) time. The M(foo) means "The message& a& p& f3 n- }0 y0 u7 C
// called <foo>". You can send a message To a particular
! G4 g# ^; K6 h- v // object, or ForEach object in a collection.
2 @% [5 ]; J9 h' @# Q2 d6 o# e3 y, P
( o8 _5 g. p# B; W8 w6 h // Note we update the heatspace in two phases: first run
3 f8 l0 M' ~# ?3 N( j3 ^2 Y7 c* p // diffusion, then run "updateWorld" to actually enact the
3 H1 J6 L l K8 ?; S f // changes the heatbugs have made. The ordering here is
6 \/ f* L$ Z- q+ v' j, V // significant!
: e! o8 G. {- u& U ( i/ g: u g% H, |0 ?- Q* s
// Note also, that with the additional$ V: N0 {8 S9 Q: _
// `randomizeHeatbugUpdateOrder' Boolean flag we can
$ w5 u. c% m7 @ t // randomize the order in which the bugs actually run
- x4 L) t1 M# ~9 _( M // their step rule. This has the effect of removing any/ q: n) }2 @- q2 ]7 w6 \! `
// systematic bias in the iteration throught the heatbug
$ q; V2 D: K* E5 T3 M1 I // list from timestep to timestep- u) u# `( }- V+ s/ M1 a" k
% J c9 z: k# s3 l P2 U# D
// By default, all `createActionForEach' modelActions have
0 C: g0 j& N3 L3 S5 p( D5 ] @; C$ T // a default order of `Sequential', which means that the4 x: x* U: l) Z
// order of iteration through the `heatbugList' will be
8 F1 d! b; k: l4 a" Z // identical (assuming the list order is not changed; a3 _0 J! B' r7 D' W
// indirectly by some other process).
0 }( E+ x2 n$ W
$ W8 ]8 Z) u- p modelActions = new ActionGroupImpl (getZone ()); e" F: H- s+ i. C6 b. G8 u
- F% m; V2 B( S: I try {$ {8 S, [9 g+ a/ P3 I& e/ j2 m, T: z
modelActions.createActionTo$message# y/ P' B; |8 W+ f
(heat, new Selector (heat.getClass (), "stepRule", false));3 g/ R; F" Q; F# B# {3 I' I7 C4 ^$ V u
} catch (Exception e) {
, _! K- R' q: ~- G System.err.println ("Exception stepRule: " + e.getMessage ());
, q1 H5 J. F5 v) e0 N( T }/ W5 f# L2 l& e# F9 R U
2 \' o3 z0 b( u g try {( ~! h) l" V0 L; {3 F1 ?
Heatbug proto = (Heatbug) heatbugList.get (0);
' G% c, K: F" V4 W% e. n7 k Selector sel = : x( n# a' `/ I) ]8 c4 I
new Selector (proto.getClass (), "heatbugStep", false);
$ I0 \2 `. b; ^, `9 V, B6 t actionForEach =* D7 c4 ]& s; k0 W/ e
modelActions.createFActionForEachHomogeneous$call+ S( I- N2 e% ?2 U; u( {
(heatbugList,
) @1 t3 r9 I" k( a1 `! Q new FCallImpl (this, proto, sel,, U5 H4 M e% X4 q/ _
new FArgumentsImpl (this, sel)));% q8 N9 {' c( l9 R+ n
} catch (Exception e) {
) u6 {% R9 t3 @3 A* l$ S9 j C e.printStackTrace (System.err);# C" }2 }+ }5 n$ e3 q
}
5 L# L& g' |( @/ R
( N/ ^% Y2 s' R k/ A# Q1 W6 X$ F syncUpdateOrder ();
( } ^8 |% W* D" }
9 z: I3 R3 p. K) V6 J5 {" ~ try {
/ Y5 t, o& ^' p0 N% h4 d" T1 g' Z modelActions.createActionTo$message
6 b# M8 R7 f) G' m' O (heat, new Selector (heat.getClass (), "updateLattice", false));' G! _5 \7 S' ~& |
} catch (Exception e) {
: b9 d! g7 u6 Y0 j0 h System.err.println("Exception updateLattice: " + e.getMessage ());
' H) O+ a; R+ u0 K# q$ u& x( s" O }
/ @" _" v/ J1 i* u4 [
7 T7 z0 N9 D# T // Then we create a schedule that executes the
0 }5 d% g4 O* c! w& S // modelActions. modelActions is an ActionGroup, by itself it# R7 h# U2 R4 d! A% F( u
// has no notion of time. In order to have it executed in
/ P. t/ @+ r" } // time, we create a Schedule that says to use the w' T6 ]5 m6 r" j* T" X: H7 I7 P
// modelActions ActionGroup at particular times. This: J" d4 u8 M* v& w
// schedule has a repeat interval of 1, it will loop every3 {5 D9 i- ], Z$ c- Y
// time step. The action is executed at time 0 relative to
+ ~! Q+ s6 ?- T, i" H0 ` // the beginning of the loop. N7 \0 q6 J' d% A7 ]
8 T$ B1 r1 e$ y* {
// This is a simple schedule, with only one action that is
' | V+ c, L. A4 }1 m; D0 {. P // just repeated every time. See jmousetrap for more) c3 I- D1 [" p" A, l
// complicated schedules.5 ?" h$ g& L0 g7 V$ \
# W' ^% S: M6 U modelSchedule = new ScheduleImpl (getZone (), 1);
! R9 d+ W% G$ b7 @; e modelSchedule.at$createAction (0, modelActions);
* Z* K9 c. U- d
" Z1 R: n7 O% I* X return this;
- z- W2 K9 Q9 T) ~% I; Y% i* v6 S) S } |