HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" ]' X, a* p6 T6 I7 Z5 C% e
# U( A% E( ~4 W+ y L m public Object buildActions () {' y0 c: d# @3 j2 q2 S- e
super.buildActions();
) g& B0 O+ f0 |
4 R) T1 s( l* v // Create the list of simulation actions. We put these in* F9 k! @& r- j0 E; k7 F
// an action group, because we want these actions to be2 `/ p' h- p* _% h
// executed in a specific order, but these steps should* Z$ g% N* b0 m, j0 X1 @
// take no (simulated) time. The M(foo) means "The message
( S- j8 g& q- P; k // called <foo>". You can send a message To a particular
- \' R3 x! q! ^- V" M" J Q // object, or ForEach object in a collection.
; M: z0 u6 C! E( G. K3 c- h / E( B/ n% m# _, L- Z7 c3 u L
// Note we update the heatspace in two phases: first run
& m9 I; `% p K // diffusion, then run "updateWorld" to actually enact the
9 U$ m' e2 `( P$ e // changes the heatbugs have made. The ordering here is
3 ]6 y! `6 n( M5 R8 e' U4 ]) i // significant!- ], c+ q3 q4 ?* c% G
$ Q; F" j6 l4 I- m+ N8 ?
// Note also, that with the additional
. D6 |0 S" `* L% P, t3 M // `randomizeHeatbugUpdateOrder' Boolean flag we can- l# S/ R) f) i% n) O Y
// randomize the order in which the bugs actually run
/ B. o# C C- I$ U7 b8 w0 o" P // their step rule. This has the effect of removing any
& J6 n7 w4 Z/ J" a // systematic bias in the iteration throught the heatbug
9 |5 u( o& n4 m4 }- G // list from timestep to timestep. S6 { ?, R+ i' ~1 B" V
3 t. }- S1 e2 _# @1 x; P! `" w
// By default, all `createActionForEach' modelActions have2 S: a3 Y5 M( f; l: n
// a default order of `Sequential', which means that the
9 M0 D5 G0 K- `& }' a5 d+ L // order of iteration through the `heatbugList' will be! J' D- F& q0 p/ W1 V
// identical (assuming the list order is not changed
N0 {) u. C+ X4 c) l, S // indirectly by some other process).
, w% g9 {6 z- U6 e3 ?3 N
9 L5 `. W6 W' V m ^5 x2 e0 w modelActions = new ActionGroupImpl (getZone ());
& ~. X4 N+ Z% k0 Z* h5 a7 G2 e: Q3 i: C2 @1 n/ z! Z$ K& P
try {
/ c2 h$ C) O1 i0 t. ~ modelActions.createActionTo$message
* ]7 k& @& }, H: a, o1 I4 p (heat, new Selector (heat.getClass (), "stepRule", false));
( P1 r7 W( k) _ r } catch (Exception e) {
, O& c7 o) ~/ h& {/ ^3 j; q# o System.err.println ("Exception stepRule: " + e.getMessage ());3 ?' F" u0 Z1 {* m
}
" g* C. ]2 K5 B+ ?6 R" G. |" n; Z' Z# b& N& }$ U( M
try {
: d4 d0 M- O4 B Heatbug proto = (Heatbug) heatbugList.get (0);2 x4 E$ Z' Z% T6 L# M
Selector sel =
+ D, K- C R$ k% H new Selector (proto.getClass (), "heatbugStep", false);
5 y+ N, p! `$ r# T+ N4 U" B8 k actionForEach =
3 G. l4 g) c0 G4 ` modelActions.createFActionForEachHomogeneous$call5 `5 |, }, \# O6 t1 J
(heatbugList,9 E, ` R5 k3 V1 x- Z
new FCallImpl (this, proto, sel,
- J/ t6 O* z: @9 } new FArgumentsImpl (this, sel)));
' S1 D" w W& U } catch (Exception e) {
" t9 P9 p3 N9 v; O: k8 U1 S) O: G/ R e.printStackTrace (System.err);4 ~# `5 _ d! y2 M# N$ X) Z( _
}6 |# H4 s9 Q/ m8 J# I0 b6 E. J
% @8 k, j; N& `! U* E8 I; J6 G
syncUpdateOrder ();
2 [ {8 Y& E. ]7 I( i' P8 @; M4 a5 \4 A/ ^9 s1 V# V! N
try {
- a- I* J! w9 q& ]+ h modelActions.createActionTo$message $ Y9 }) b2 ~$ }" _$ H" H, N
(heat, new Selector (heat.getClass (), "updateLattice", false));) C. t' [# h. K( Y; s- Y4 A! r1 L
} catch (Exception e) {
, R7 a8 ^3 `! o System.err.println("Exception updateLattice: " + e.getMessage ());
- J. @7 o) y4 z* j8 k# g }( g1 \; v# f) Z4 C f
. ^* [8 c2 w0 ~ // Then we create a schedule that executes the
9 k7 B0 W9 x' j/ b' w m7 r) z: ~ // modelActions. modelActions is an ActionGroup, by itself it* z9 W+ [& d! a3 G7 B1 D
// has no notion of time. In order to have it executed in8 n6 M- V- R' q8 E) b# J9 H" A
// time, we create a Schedule that says to use the
( Z/ U. p1 Y% h/ v // modelActions ActionGroup at particular times. This
3 z" i! x. w% m/ f2 b% M U // schedule has a repeat interval of 1, it will loop every
4 d4 m9 b/ J0 a$ f4 w9 X: _ // time step. The action is executed at time 0 relative to
, V* y$ V. v) [# ] C$ [0 B* p // the beginning of the loop.
0 B$ e9 F% z3 k$ P" \
( Y& k$ N) k4 E6 u // This is a simple schedule, with only one action that is+ v [5 D0 ?$ z3 E
// just repeated every time. See jmousetrap for more) a1 p7 o/ q! Z1 H3 p
// complicated schedules.# m( G5 H) ?$ h* O: A
# A8 M( j9 [4 c% N) p; K3 t modelSchedule = new ScheduleImpl (getZone (), 1);
$ v* P" ?0 k( U modelSchedule.at$createAction (0, modelActions);/ F* m% n, K- r- E& m; Q# [
Y. n8 n& ?* I return this;- |" s( C8 ?- S: l/ x$ b |3 s) V
} |