HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
5 v8 L1 G; r, I& {8 Q) ]9 q* O% h1 {. z+ m2 d5 w- B
public Object buildActions () { P1 `1 J C; D0 i. A
super.buildActions();2 O4 T/ U7 ^# C3 Z0 ?: q
* Y) n, I D- N9 t
// Create the list of simulation actions. We put these in
- a0 O: ~8 Y: g, M$ t // an action group, because we want these actions to be# A' g; l1 M/ y/ m: V, w/ s
// executed in a specific order, but these steps should
4 g2 V0 E |4 p$ H$ e // take no (simulated) time. The M(foo) means "The message* P( ~; G# L( A! I
// called <foo>". You can send a message To a particular
1 p* w5 l2 g- _5 ?" i8 h // object, or ForEach object in a collection.8 l+ X9 n* i: j# W+ s
9 N4 ]/ W+ [. S1 K0 ]' ^: c: T
// Note we update the heatspace in two phases: first run' c! D" i: H) x! |& R$ I8 \) t* {
// diffusion, then run "updateWorld" to actually enact the9 c0 E8 H' s& J3 t3 a" s
// changes the heatbugs have made. The ordering here is6 j" d: G" i0 s% J4 }5 f- B
// significant!
3 z5 M) H8 N: K. k, _6 L( _4 e+ L6 U % l- }' x4 v u$ E" G C
// Note also, that with the additional
5 t) K! S8 g* T" T // `randomizeHeatbugUpdateOrder' Boolean flag we can) y/ `* b; Z6 U: x4 Y- {( W
// randomize the order in which the bugs actually run
9 o" ^/ x! M% i) e0 }" }7 c // their step rule. This has the effect of removing any
( V: `/ J' V9 [9 M1 n% o1 X0 K // systematic bias in the iteration throught the heatbug
8 Z1 ^% Q* c5 J6 E7 i3 V // list from timestep to timestep
: ]; E/ a: Y: }* h$ L7 I
, \) F' T% I" M3 p( Z; F // By default, all `createActionForEach' modelActions have) z4 U0 W/ ?2 ^1 h
// a default order of `Sequential', which means that the7 s$ r: H3 ^0 r0 u# k4 v
// order of iteration through the `heatbugList' will be
! c" y @ t. c( n U/ p+ h // identical (assuming the list order is not changed9 U2 q% G% ?* e" y+ v; i
// indirectly by some other process).
( v" Q- s1 H8 G. g3 D' J2 Q( M D
" k& a, H, a/ Q4 J8 V* k modelActions = new ActionGroupImpl (getZone ());
6 u8 w; u; }' L# z- Y! v n' P/ W; h( o
try {% v/ G8 E& S5 R* b7 f" A
modelActions.createActionTo$message
4 A5 I# B0 S2 F8 Y+ G) U' J* g (heat, new Selector (heat.getClass (), "stepRule", false));. f1 R L( U" R! S* [8 k+ P& o
} catch (Exception e) {1 q# h. i; V- y$ }6 z, J+ f4 I4 {
System.err.println ("Exception stepRule: " + e.getMessage ());
) _% L) W# n! J: Z }& s' l. Z1 a+ p6 ?& _
/ R" J, U7 G1 a3 _# |" ^ try {
+ g# M' e, Z- ~0 o' q7 S9 x Heatbug proto = (Heatbug) heatbugList.get (0);/ p' b: {+ }* C# s6 f2 v. ?
Selector sel =
& h2 `" K) c' n) o6 d, I& z- c new Selector (proto.getClass (), "heatbugStep", false);* ?) g1 d; j/ H' H$ c
actionForEach =8 Q6 W, m( u$ v7 z0 N* ^6 p
modelActions.createFActionForEachHomogeneous$call
. h% b/ v! f0 O9 J (heatbugList,, v7 |2 ^/ C( {5 s
new FCallImpl (this, proto, sel,
8 B3 M7 c/ i9 L- E' w( v: a new FArgumentsImpl (this, sel)));% C/ N, x) K3 Y' W6 [0 ?
} catch (Exception e) {
! Z: C: s' J9 M" [- `$ } e.printStackTrace (System.err);
0 E4 q3 m- t+ m6 K9 ? }( W, g/ X0 `0 h, f+ Q9 g: e
5 v; m2 x4 K4 e2 Q3 E
syncUpdateOrder ();# w3 P; b( M6 h% D
* |& j+ W% f; S
try {
, w/ f& V/ ~1 c/ ~! H( L modelActions.createActionTo$message ) G4 K- T2 q7 C+ [8 y% t5 W
(heat, new Selector (heat.getClass (), "updateLattice", false));, R; u) T7 m, ^( G8 u3 |
} catch (Exception e) {6 ?6 ?) ~) s+ K2 g) X% ^; `- ]/ D
System.err.println("Exception updateLattice: " + e.getMessage ());
' F6 J& _7 d9 ^- k! l8 q3 F# r }
- s2 F4 Z! J" J. ^/ [ z; G
+ j* q) w7 O H1 g5 p! A // Then we create a schedule that executes the9 B$ {$ v2 Q4 |# {1 q9 T- ]2 C- h
// modelActions. modelActions is an ActionGroup, by itself it- h5 l! T8 L2 ]) f4 r* f
// has no notion of time. In order to have it executed in; [8 G( D/ ]# l3 _/ U9 T7 W+ B0 W
// time, we create a Schedule that says to use the
% q9 a9 Q, z& d // modelActions ActionGroup at particular times. This
' c; @6 y% u* }6 W3 `- O1 E // schedule has a repeat interval of 1, it will loop every: W$ Z) G8 s; ?! b; T
// time step. The action is executed at time 0 relative to
, T/ [6 c& E' q // the beginning of the loop.( l- }: _7 ~( n- D6 W% K/ b% F5 s
* p7 s$ I4 g' S" h5 v, f9 O" t8 w* p# { // This is a simple schedule, with only one action that is
( K0 u7 V1 _3 ]5 |: n // just repeated every time. See jmousetrap for more$ Y) y, ^$ f6 n ^( Q
// complicated schedules.$ q/ Y: p; k, P
2 J: X& |4 r4 @! u% G, g
modelSchedule = new ScheduleImpl (getZone (), 1);% P$ d; [5 q' q; k! y
modelSchedule.at$createAction (0, modelActions);
8 U: a& B3 W( y0 h+ S9 O
, K- v- \& h2 j) j: K G( m6 Z return this;8 ~0 d$ G* w) v# i: a- a
} |