HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: n- u: F0 m) J @0 T3 J$ U1 L& X0 }, W
public Object buildActions () {0 i0 Q' {, Z ^+ C/ p3 C& N
super.buildActions();5 z( f2 S! A1 l! |" J
N% D/ p' u$ W" {4 q: Q8 m. i- J6 Q) R // Create the list of simulation actions. We put these in
1 p# N& C0 x7 M! s // an action group, because we want these actions to be
$ C5 p8 G0 S9 v // executed in a specific order, but these steps should
! N# p0 A- l: x/ } // take no (simulated) time. The M(foo) means "The message/ d6 p/ u# y# W1 \, ?2 d
// called <foo>". You can send a message To a particular; {( e+ O, g j' a4 Y
// object, or ForEach object in a collection.1 k7 T2 x0 ?- ^5 d% j
4 u* ^1 @! ~6 m* _2 J
// Note we update the heatspace in two phases: first run5 {2 m! M1 p5 ^' h" T
// diffusion, then run "updateWorld" to actually enact the
. I5 n; G' W q9 {, v& f$ \" p // changes the heatbugs have made. The ordering here is* y% H0 I* {# X4 ~. V- B
// significant!
X; J* v. T8 }. J $ Q; h: s7 @+ }* O) {) ?% K
// Note also, that with the additional; O7 ^+ G' ^* y+ C8 {
// `randomizeHeatbugUpdateOrder' Boolean flag we can2 T' |2 q- z2 ~- Y
// randomize the order in which the bugs actually run
- A h$ _. d0 }3 W0 _5 |+ E2 X // their step rule. This has the effect of removing any
1 \0 O- r/ `: S# C8 G: K: m // systematic bias in the iteration throught the heatbug
+ e! A4 x: c$ v% c // list from timestep to timestep, T) L. `! |4 @
+ Z: m5 B* j) I1 } // By default, all `createActionForEach' modelActions have
# W2 d$ N2 T. d6 _) D! r! J // a default order of `Sequential', which means that the4 d0 B: I: a: v* |$ z
// order of iteration through the `heatbugList' will be
5 k. Z5 ~, B5 p* N3 e // identical (assuming the list order is not changed
' k. j; P$ ^3 e& W6 ?8 w: X // indirectly by some other process).
0 g+ M7 a! | I8 m
: `, U) n2 R$ V2 L7 Q7 D6 c8 C modelActions = new ActionGroupImpl (getZone ());
( Q1 g- s* l' W# u
: i$ c1 j0 z) A- J) v/ h try {2 T, J. Q) }: F" L( |
modelActions.createActionTo$message" t( E: e* ?8 b
(heat, new Selector (heat.getClass (), "stepRule", false));
g6 \& ]1 y" K, _0 u) S } catch (Exception e) {
/ \+ j) d: O$ _" a9 \ System.err.println ("Exception stepRule: " + e.getMessage ());
3 ]' s: l. |7 S1 b3 p }
/ U; w" Z7 `# N! l) ^8 x: M) H' A) n4 c8 [7 f" ?+ ]
try {
/ `4 Y" X# P1 W; D8 P8 b Heatbug proto = (Heatbug) heatbugList.get (0);
" J) ^% p) `! a ?! k; z& H. B* i Selector sel =
p6 l9 O: t0 s/ ` new Selector (proto.getClass (), "heatbugStep", false);. D/ F! J+ D! R3 l
actionForEach =
( D: d: ] `3 C1 X6 ~6 a modelActions.createFActionForEachHomogeneous$call
$ u( g& Z1 S9 i- i2 P* A (heatbugList,
! ~* z) {1 h, Z* ~- o" D new FCallImpl (this, proto, sel,
) T3 T0 z6 w: A& x2 U new FArgumentsImpl (this, sel)));" v6 Y' c/ B) T+ x& l/ x* C/ W
} catch (Exception e) {( u) W: w8 u& F9 u& }; _) d* h
e.printStackTrace (System.err);
) v4 W% |' o8 y }
4 ~& Y; |3 p& Z$ Y0 q " y6 N6 j) [: J1 l/ e* y
syncUpdateOrder ();& b/ E% f0 Y; m$ g; I
( j5 Z6 R# G7 Y) v7 Y) B6 k$ i+ l
try {8 D9 T: I- ?! A1 {4 q* V
modelActions.createActionTo$message
' C' c* ~: @4 F* C5 f (heat, new Selector (heat.getClass (), "updateLattice", false));5 g# x, M1 J6 D" l9 R0 A
} catch (Exception e) {8 A" F0 i/ @( @
System.err.println("Exception updateLattice: " + e.getMessage ());
4 `* g3 `) Z- T }
5 [$ d3 U# j7 ~4 R8 `# ^/ B$ ]# r 8 j! P$ L# V: l8 P. E; s
// Then we create a schedule that executes the. f* q! t+ R! Q, a7 h0 y
// modelActions. modelActions is an ActionGroup, by itself it. H- \3 g( o- X1 R9 Y9 |
// has no notion of time. In order to have it executed in
* m- z0 A* B+ n0 n2 z/ W- [ // time, we create a Schedule that says to use the
' U. `7 r& O8 N; h$ F // modelActions ActionGroup at particular times. This
$ O0 P( |) V9 }# I; r( p- S! g, }) j. I // schedule has a repeat interval of 1, it will loop every N7 h) |+ c* I) p
// time step. The action is executed at time 0 relative to
+ S% O' r% w" i, G; s // the beginning of the loop. V% R/ L+ T' S! g$ M, V
1 ~: w% M4 ?9 [! H( n5 o; w3 Q% T
// This is a simple schedule, with only one action that is
! `( X/ `# v1 I% ~. c/ j // just repeated every time. See jmousetrap for more
; h* @ S2 K0 g) o9 J9 @. ~# u // complicated schedules.! m$ H! ~5 y) ]# X( L8 \
& ~* c1 T9 k& l( A+ ?
modelSchedule = new ScheduleImpl (getZone (), 1);
/ {, h0 y) Q& G- ]( w- n7 v ^ modelSchedule.at$createAction (0, modelActions);4 C0 ~. E" V `% ^
4 Y+ {2 p) B) H9 e3 ^( z% R
return this;
4 [# v3 k8 D) M: Q6 B } |