HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% v5 t8 @5 N) r4 z8 l) W( a& ^
5 P9 g- Z* @' F6 Y8 w, r
public Object buildActions () {
% K0 |% L- g b* J; U1 W; m super.buildActions();
8 w. U# h9 j5 n- ?; y, y
$ x6 ?2 ^ {$ ~ // Create the list of simulation actions. We put these in
. _ x/ x0 @' [/ x& k. K // an action group, because we want these actions to be
/ z9 f2 n& f/ q8 k. m // executed in a specific order, but these steps should
^+ P6 Y/ E3 a# d$ x // take no (simulated) time. The M(foo) means "The message
- z( f, {# h v7 F // called <foo>". You can send a message To a particular
3 p. Q& b! V- j: `. R* d5 ~6 W, S // object, or ForEach object in a collection.8 {0 L& q7 O/ d* H- w( C7 u7 C
) @3 E! N3 R8 w0 i. \4 ^
// Note we update the heatspace in two phases: first run
/ S0 y% L: M* E$ D // diffusion, then run "updateWorld" to actually enact the. E% c% z. S3 l4 P; `& N
// changes the heatbugs have made. The ordering here is% t5 f# k7 h5 B! H1 U
// significant!
+ a4 @- }- F6 Y0 Q/ m; ?: W p ! w/ [3 y5 E3 I, D2 A
// Note also, that with the additional1 ^9 }# Y5 G* w
// `randomizeHeatbugUpdateOrder' Boolean flag we can
4 |* k& ` ?, T. D$ h; ~# a // randomize the order in which the bugs actually run/ H1 _! D! o+ n; X
// their step rule. This has the effect of removing any2 T8 J0 e) k7 U7 Q1 r0 d
// systematic bias in the iteration throught the heatbug% B, ^: j" O# d3 P# s( e- F
// list from timestep to timestep, H/ e& `/ X$ `1 r d3 K
+ [5 m5 K9 `( N2 N // By default, all `createActionForEach' modelActions have% @8 ?$ E0 _9 M
// a default order of `Sequential', which means that the! S: u, n" P) Q3 d' y$ O2 }
// order of iteration through the `heatbugList' will be% [2 E9 {+ N. f
// identical (assuming the list order is not changed- U8 ~* g8 I; v0 g0 a/ p1 g
// indirectly by some other process).
! B l& v% w* m C6 V. w3 f
7 d* [; s- J) @, B9 Z/ a9 L+ n modelActions = new ActionGroupImpl (getZone ());: J+ V+ S% O2 W; X9 X/ j
" t. d) D. n2 A3 \/ ?8 k$ }
try {7 ?/ Z, l; q: C1 x# i
modelActions.createActionTo$message6 _- V0 W" s' x4 F8 {1 w( e+ B
(heat, new Selector (heat.getClass (), "stepRule", false));! v" `2 q( W9 r5 o' B4 F
} catch (Exception e) {. z7 Q0 s2 v1 f3 V9 ]/ N T* ]+ h
System.err.println ("Exception stepRule: " + e.getMessage ());3 q7 G$ l' u7 s1 b; T
}
/ a1 b% P+ }! @$ [& M
9 B, C8 @/ H0 x try {
: w# y# B; K) s4 M2 w- I6 d Heatbug proto = (Heatbug) heatbugList.get (0);
+ r+ X6 X5 Y" j: p/ g# c7 O Selector sel =
$ t$ V$ \( _1 O: @; ?+ T- r new Selector (proto.getClass (), "heatbugStep", false);
2 |) M" j/ F0 j; W% t6 J* z, x actionForEach =
6 T8 A( {) C. W- {% E2 a6 h, A/ `+ r modelActions.createFActionForEachHomogeneous$call
( f! W0 c* b% a; F( V n5 r* G; D$ q (heatbugList,
6 M" E( H* M- h' B, M8 m new FCallImpl (this, proto, sel,
6 W$ k" f( `9 }# q; x% B new FArgumentsImpl (this, sel)));) k/ e4 y/ ?# L* r. A+ L
} catch (Exception e) {& [; @. b+ X- N* y
e.printStackTrace (System.err);
5 e! h4 \- R9 u+ X }
# C% b0 T" r% d4 }7 A 1 w( B; [' I; I4 Z w, {; r& e
syncUpdateOrder ();
+ r9 P# S! [* s, n/ }% T3 c. `8 t8 X" }# g
try {& g; m: }9 F, {# y
modelActions.createActionTo$message
* Y, @! z6 f. W* q3 k4 m' E (heat, new Selector (heat.getClass (), "updateLattice", false));
+ v+ l6 A- p/ O } catch (Exception e) {" Y# w1 M% ?! a3 ~, L+ x! b
System.err.println("Exception updateLattice: " + e.getMessage ());
' _' t4 p4 ~9 b7 Y/ F$ u7 A1 [ }
5 A- c( o: o5 n9 u; a/ l
6 A+ u& _! H! l2 t3 q1 w% s // Then we create a schedule that executes the
: `8 i$ q+ E* y" M- T% [ m' b4 T // modelActions. modelActions is an ActionGroup, by itself it
7 \$ ~6 s1 a. q" Y( W4 V // has no notion of time. In order to have it executed in! o% `2 U/ [* |1 y' H5 O
// time, we create a Schedule that says to use the9 B" R8 r+ Z6 U9 s+ f
// modelActions ActionGroup at particular times. This7 r! e. Z9 z; t! d
// schedule has a repeat interval of 1, it will loop every% ?2 L) s/ v; M5 @; V Y
// time step. The action is executed at time 0 relative to
' _. M& V* t0 k0 Z8 B& ]- y* T // the beginning of the loop.: a$ S( p. w2 y2 Y; S" \
/ z; G1 J5 u9 i2 R
// This is a simple schedule, with only one action that is k# Z: B/ V0 `* O7 z
// just repeated every time. See jmousetrap for more3 h# I4 F" n: b; l& n. E6 J
// complicated schedules.$ J; y9 _& w1 l3 Y! E& C
, B3 G0 T5 C0 J1 g, u! y1 e; _; R modelSchedule = new ScheduleImpl (getZone (), 1);
3 j/ _7 ], g' o) s modelSchedule.at$createAction (0, modelActions);
! E- C, u( h) @# W6 v ) g" v! d2 f0 l! Z! w0 h" V
return this;) A) C: p* K8 M% w4 }& i! s* {
} |