HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:! E4 F3 L) q5 M
7 S- a' S) J; q: S$ k; {/ I. ^ public Object buildActions () {( Q- }8 T( n9 K# E- {2 ]
super.buildActions();8 S% w. s& ^% `2 R" M# }
- ]2 e5 h; t! u2 R7 P$ j4 t // Create the list of simulation actions. We put these in
/ H5 n5 k) ^6 q) E3 U // an action group, because we want these actions to be
- y: b! K1 f& m f' E // executed in a specific order, but these steps should: v0 D1 b8 e; s# c' V/ @: L
// take no (simulated) time. The M(foo) means "The message
2 A7 L* W( i) C // called <foo>". You can send a message To a particular
" `6 Q3 J8 L3 z8 j, V) p" m' X7 X+ f // object, or ForEach object in a collection.
/ a9 x; N! g0 l* [% O: n " P2 g$ b' j5 p0 l
// Note we update the heatspace in two phases: first run
& Z9 V2 B& i9 o/ v" i- s* q& w& \ // diffusion, then run "updateWorld" to actually enact the
$ t: f$ M+ J @$ i // changes the heatbugs have made. The ordering here is' ^5 ?2 b* s3 }2 }) j
// significant!5 ?/ _! s9 i3 W6 ]. X# ^# E7 o
# B! y8 D- K9 h% s( T
// Note also, that with the additional
) k0 a4 i# P) E* B2 F4 T // `randomizeHeatbugUpdateOrder' Boolean flag we can
$ k- K. C% R, Q$ f5 e3 { // randomize the order in which the bugs actually run
0 }( e. M/ P* N // their step rule. This has the effect of removing any
& ]- e: b ]; A! }- _, _/ o' V // systematic bias in the iteration throught the heatbug
, r+ j: J6 `0 Z // list from timestep to timestep* B2 g4 a" T& A* [8 J
# e. m4 G3 ^; ~ // By default, all `createActionForEach' modelActions have; C5 A) d# j# ^7 M t' x
// a default order of `Sequential', which means that the% m. C5 }( h6 G( s9 l6 ?
// order of iteration through the `heatbugList' will be
, v; j1 Y- l* T6 e. G* O // identical (assuming the list order is not changed
/ c* I, e; t, m+ ?) U // indirectly by some other process).& t# x2 Z8 X$ _; u) \
3 a! |1 i7 k3 b" x! @ modelActions = new ActionGroupImpl (getZone ());
4 V2 o- y& z' \5 q" f, Z+ L/ s4 g/ X
try {
V; v J; r/ R, s7 N' g C modelActions.createActionTo$message; Z4 K+ Y7 P- S# s% |) _
(heat, new Selector (heat.getClass (), "stepRule", false));
. i" q6 Q) z( Y+ p; q% t( j+ X, A+ P } catch (Exception e) {
2 m/ l4 }( n Y" Q System.err.println ("Exception stepRule: " + e.getMessage ());
$ V# k, c9 C t }
5 F* L/ o9 L3 Z* h/ b6 u9 N# J- v, L- }
try {( \- C' L b% U8 M
Heatbug proto = (Heatbug) heatbugList.get (0);2 _7 Z% t4 T6 C9 {+ F6 \, V, X% p
Selector sel = / P' ^ s9 S' ^3 I7 Q
new Selector (proto.getClass (), "heatbugStep", false);2 l" S8 b# b0 O! ? C5 D7 r
actionForEach =
6 s6 Z9 w& Z( h! S. X modelActions.createFActionForEachHomogeneous$call: x- p: ^. z, s5 V- c6 B3 R2 H6 b- d
(heatbugList,* K2 M% S6 t# a( t
new FCallImpl (this, proto, sel,
; _% g' P" k9 K6 E' V; P$ ` new FArgumentsImpl (this, sel)));, L, H ^# E: u* G3 ?
} catch (Exception e) {
1 ]. B. o7 y3 C8 Y. v( Z e.printStackTrace (System.err);1 U( U& P+ i0 e# o' J F6 Q' a. _
}# Y5 ?0 z7 ?3 Y+ f h% K' V
% [; X+ o# x% W- R- Y syncUpdateOrder ();2 D3 T1 W. }2 m# S7 F9 I/ c
" W: ^4 w; x9 ~ t" n5 |
try {' w7 V, [5 O# o3 X. g# O% P! _
modelActions.createActionTo$message
3 a( T0 y3 u1 J) r3 \) y( o; a (heat, new Selector (heat.getClass (), "updateLattice", false));. F4 s8 h- i) O% d1 g
} catch (Exception e) {4 H9 \. k& ~3 V) f' Z) T- a" B& T
System.err.println("Exception updateLattice: " + e.getMessage ());9 v* E6 T2 A. Y% ?8 {
}
! d9 V/ \7 P5 Z$ r& ^* k
+ g1 C! `! V. b // Then we create a schedule that executes the
. v2 s* W8 m8 N, U1 z/ e' P // modelActions. modelActions is an ActionGroup, by itself it+ ~8 G1 c0 Y+ @' q4 m9 z* ?% i
// has no notion of time. In order to have it executed in2 \ E6 V7 b6 @
// time, we create a Schedule that says to use the
2 X4 A; h/ w b. z8 S# B E: k3 r // modelActions ActionGroup at particular times. This
6 {6 _4 [6 z' o. o0 M" K // schedule has a repeat interval of 1, it will loop every, S+ s' E" j% V) ]" Y
// time step. The action is executed at time 0 relative to& D0 [7 ]+ ^9 t- D* H
// the beginning of the loop.
# R/ Y+ ?- l# q$ h7 F
, s- i! s3 f! w$ }* E. F // This is a simple schedule, with only one action that is2 x5 A' I0 R ], L
// just repeated every time. See jmousetrap for more+ m b. c' X" E% t' x# ~3 L* y4 i. \6 J
// complicated schedules.
4 J" i B8 w4 `2 e1 ^. z3 n 1 {& M: U& V; o9 H
modelSchedule = new ScheduleImpl (getZone (), 1);! O+ S" [" p, \& A: Q$ o
modelSchedule.at$createAction (0, modelActions);
, O$ k" M, }4 [; j ; C! a0 _. O: {: `
return this;
6 E7 v4 o6 @: _' \& ], c } |