HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 ^ T# ~, }' ]8 q
& q. L* Z1 q( L* X& d public Object buildActions () {
, [- _4 r% T5 K8 S2 W8 A- ]/ _+ s super.buildActions();6 k, m( k9 Z- J" z6 n/ A
8 |$ R Q. i+ K- O: W, t // Create the list of simulation actions. We put these in* K3 r R% s0 G% L; l; c; K
// an action group, because we want these actions to be ?0 K6 ]' }' W+ ^0 t; C' u
// executed in a specific order, but these steps should! m% P* ?6 m( o' Q3 c* `
// take no (simulated) time. The M(foo) means "The message
1 ^; p, u0 o0 y1 K1 T- i/ I // called <foo>". You can send a message To a particular" v9 ~( O R9 O4 E& B
// object, or ForEach object in a collection.
! V. V1 Q# E$ _. g9 I7 s
9 H2 Q8 Y0 P1 y3 {& \# g! y" S0 `& u* P // Note we update the heatspace in two phases: first run- S5 k- |: W* D9 l6 Z0 w. c% `0 M: n
// diffusion, then run "updateWorld" to actually enact the
; ^" K5 a% k$ V6 E' \0 |) ? // changes the heatbugs have made. The ordering here is6 q1 r( O+ }+ U+ N. | ^6 X# u; _
// significant!
4 d J. @! k0 r& k- H
) k# U( j5 d& I: E // Note also, that with the additional1 [; L; H) v+ \, f r4 v) u$ b
// `randomizeHeatbugUpdateOrder' Boolean flag we can0 B8 i5 ?/ m! u; z3 F( Z% V/ W
// randomize the order in which the bugs actually run5 ?$ s' v/ g8 q& t9 p/ `- Q+ M
// their step rule. This has the effect of removing any. _7 m3 j3 `) ?% x' i
// systematic bias in the iteration throught the heatbug; Z9 M. i3 I6 Y$ D1 w* f
// list from timestep to timestep
/ {( p; X& `, `; b1 ~$ X * B+ C( p$ ^- v5 b, c' b
// By default, all `createActionForEach' modelActions have1 t. X) Y6 n ~$ ?4 J- X: [
// a default order of `Sequential', which means that the
" M% n4 D) l5 W6 v% h // order of iteration through the `heatbugList' will be
/ {6 Z `$ p, i0 s; C' `* R // identical (assuming the list order is not changed+ Z. Q) f0 ^- B, K/ C/ m) n9 J
// indirectly by some other process).
9 }' f" `2 _; ^. x
) s) r" O+ y% k. Z; ~8 h modelActions = new ActionGroupImpl (getZone ());
: w: L2 }( a) H6 p
5 x6 s, }% }4 n% G$ [3 }4 n# `. p, j% a try {. ~2 |' g5 N: W+ M3 G
modelActions.createActionTo$message! O0 d# V3 y- I( X' X
(heat, new Selector (heat.getClass (), "stepRule", false));# t e7 ~* d9 S2 ^/ K! c; t% `3 q1 \: ^
} catch (Exception e) {
, ]; d" K5 m; G0 S5 d5 U System.err.println ("Exception stepRule: " + e.getMessage ());. }$ B9 o0 O# q1 V
}
2 Z9 q. b& r0 D+ h" c( Y
( ^ a& E. \% P/ D$ b) z: v try {
5 U) b2 ^$ A/ V7 n' n w7 f Heatbug proto = (Heatbug) heatbugList.get (0);* |8 c1 j/ W3 J$ q
Selector sel = % h6 A4 c' f" ~2 I( b0 ]
new Selector (proto.getClass (), "heatbugStep", false);
/ g/ r0 r( n0 ?( J/ f" S actionForEach =1 a6 f5 h* t2 ~. \2 S: {6 a7 p
modelActions.createFActionForEachHomogeneous$call
9 A8 k- Y* |) E! w (heatbugList,8 L- J Y0 i1 s3 w% }
new FCallImpl (this, proto, sel,( R* v$ O5 _+ k1 j/ S
new FArgumentsImpl (this, sel)));
/ u3 ^+ H# j- q: [0 a n3 G } catch (Exception e) {
# d* S4 w8 @% H1 r4 Q( U, @" z e.printStackTrace (System.err);& H8 A" O, {+ Y p0 Z: I* Z
}( [( a" O, k" H- O
& ?; }9 X8 u5 `! j @! ^( I6 S
syncUpdateOrder ();
8 H, |. p% }2 G2 w' r3 Z3 @$ S
$ w3 l( q; F! |% U) D0 ] try {& z6 d4 E4 ^" e7 B- k/ `
modelActions.createActionTo$message 1 q+ v" ^ M% @' J/ g. } _. g
(heat, new Selector (heat.getClass (), "updateLattice", false));2 v' c j' }, x2 F! a! n E; Q
} catch (Exception e) {& F b+ G; j& |9 q6 V* Z: l, q
System.err.println("Exception updateLattice: " + e.getMessage ());
0 c, `; n2 r; X( W' [ }
4 v% Z2 N" m f
2 }0 |; F: ^, h // Then we create a schedule that executes the
# g5 ?1 I1 y& W' y // modelActions. modelActions is an ActionGroup, by itself it
: i) [, _, h, `" s // has no notion of time. In order to have it executed in
, X! _- _( u( e // time, we create a Schedule that says to use the% O; a! d+ [! l$ L
// modelActions ActionGroup at particular times. This
/ y) d, J$ U, ~3 C3 n4 m // schedule has a repeat interval of 1, it will loop every
; Y6 l* b6 [; o // time step. The action is executed at time 0 relative to1 Z6 b- P; e, P; N" a' T- h
// the beginning of the loop.
) d$ D8 V$ Q$ E
3 Q1 Y5 Q+ Q( } Q# R# b | // This is a simple schedule, with only one action that is
0 F/ Y A! Y' E' O3 b: s // just repeated every time. See jmousetrap for more9 _: x# _; F5 A
// complicated schedules.
! F" W \/ R0 \! u
8 E5 ]( W7 l1 @! M; t: F- A" V modelSchedule = new ScheduleImpl (getZone (), 1);
6 Y2 [" M3 a% U* K0 A* t modelSchedule.at$createAction (0, modelActions); Q, z/ `5 N i: n
% e" f8 O6 a+ {* g: C, y return this;1 u* U$ n* s9 n
} |