HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% |3 V- `. ^9 q+ V
5 R( E, ?( W7 o. x: z' j" o) ? public Object buildActions () {
' ?+ ^" K H- A4 n super.buildActions();8 k7 f9 C0 v9 t. w( h! {1 t) w4 m
% R7 a' g# ?9 n7 T$ Q2 Z$ |# k
// Create the list of simulation actions. We put these in9 X, a5 \- N0 }1 F* m1 U, r1 C6 u, U& D
// an action group, because we want these actions to be
3 T/ K& M; x# P1 E0 _ // executed in a specific order, but these steps should& s0 z. U% K, r5 I% @
// take no (simulated) time. The M(foo) means "The message" P5 O% f7 o( H5 Y. J8 L; t7 ]0 d
// called <foo>". You can send a message To a particular/ V2 i! ]; e2 {# _) o
// object, or ForEach object in a collection." }) M) J7 U, \4 @, Z& u3 E
- ]/ E3 _4 Z# V' L5 j
// Note we update the heatspace in two phases: first run8 D( X# G$ R9 G1 b
// diffusion, then run "updateWorld" to actually enact the9 E* j4 Y5 M4 @# u/ ~4 k+ y
// changes the heatbugs have made. The ordering here is7 c8 H# a4 h! `1 a2 o$ E
// significant!1 @$ o% g: I; b. K+ E
9 {# R6 K% r: f% ?* d( U% q) n! q // Note also, that with the additional. G* s9 E2 }) @
// `randomizeHeatbugUpdateOrder' Boolean flag we can
5 x3 P0 b6 }# u8 j! X0 q // randomize the order in which the bugs actually run
! j' `" _' S: L+ Q // their step rule. This has the effect of removing any* a! [ S% V5 E) v
// systematic bias in the iteration throught the heatbug( U# N1 q* Y; a7 I+ g$ Y9 O9 {
// list from timestep to timestep
$ ^: X: z7 b3 a7 T, k& m: W
5 V, q J6 L# @& b // By default, all `createActionForEach' modelActions have, K1 P0 p0 x) C
// a default order of `Sequential', which means that the
3 H- {: n+ P1 w( r // order of iteration through the `heatbugList' will be
: t4 x+ }$ V) v, Y; s3 v( ? // identical (assuming the list order is not changed
7 L% v. u6 A Z4 d1 H // indirectly by some other process).
# v: ]- q+ H# r# Q2 S+ y
. M. y9 H: r3 c+ p% Y% g modelActions = new ActionGroupImpl (getZone ());
6 K" W7 D. k7 r3 `) s1 h/ b3 X8 d% b2 }! @) p% g
try {
0 [7 q1 K( R8 ?- C" M" q2 l: E2 | modelActions.createActionTo$message1 N; ~/ q; N, Q ~7 y
(heat, new Selector (heat.getClass (), "stepRule", false));
\6 j# _ I, b( n' ?& V } catch (Exception e) {
0 ?: F" u- d! X" ^( y. `$ E$ l System.err.println ("Exception stepRule: " + e.getMessage ());0 r+ K; t6 J5 ?9 q. E2 w7 x
}3 t/ u, }6 h- i4 _) C
! [8 U0 ~3 Z: T" P" g
try {8 ?* h9 U4 A5 ~4 W8 O
Heatbug proto = (Heatbug) heatbugList.get (0);
9 s# b+ r# P- B Selector sel = ! @# q* Z7 b: N2 i/ c3 E
new Selector (proto.getClass (), "heatbugStep", false);5 V. D7 ^( D* I/ }# h7 D
actionForEach = @" ]3 }8 U5 p5 H( B( d! c+ i# }
modelActions.createFActionForEachHomogeneous$call9 B: W9 P1 B: M
(heatbugList,& x9 v A: @2 z5 y. }) \4 Z
new FCallImpl (this, proto, sel,; C" h) A* M: r& ^- Z8 k
new FArgumentsImpl (this, sel)));
1 c& B7 L. W- j) N } catch (Exception e) {
, _* d4 x A. r" Z* h+ t! N e.printStackTrace (System.err);- j" p5 N7 Z+ Y, b* G" P- ?' J1 l, t
}! s5 T3 m. {& n" o* m$ ?% t
; A0 c! f+ R" {. u9 ~ syncUpdateOrder ();
! b; ~% m: M/ @' X7 S8 I. a3 x
try {
5 I, Y0 ^0 X }: P/ c- O, ^ modelActions.createActionTo$message
4 [% L3 e9 |2 ? (heat, new Selector (heat.getClass (), "updateLattice", false));
* q7 V: o/ |5 O* {. v$ z. B } catch (Exception e) {
3 o% J/ x+ x L8 D( \ System.err.println("Exception updateLattice: " + e.getMessage ());
6 h) m; K" b5 T1 a }4 x* f; k- {+ h% t3 x9 {8 i; y# b. q
# N" K* \/ g8 l // Then we create a schedule that executes the
# y* R! K: A: }- j6 Y, I2 v& Q // modelActions. modelActions is an ActionGroup, by itself it
' t5 s$ P- \1 \+ k# \& @ // has no notion of time. In order to have it executed in
0 [0 O( A7 g- T) h+ ] w // time, we create a Schedule that says to use the' L/ A6 c7 O+ a8 @& c2 [& w; M/ y
// modelActions ActionGroup at particular times. This' K# v$ Z4 @4 q; B W
// schedule has a repeat interval of 1, it will loop every
: B( D L3 g4 J% f' I4 }5 d, M$ P! R // time step. The action is executed at time 0 relative to
1 ^4 b' k/ o! D9 `6 V; `# ?5 o5 l // the beginning of the loop.. u: E/ p& V6 F( [
7 [5 L" p+ M* l8 ^* t // This is a simple schedule, with only one action that is1 Y5 }( `4 O6 Z1 |, k& }
// just repeated every time. See jmousetrap for more
& M! D, t( b! {1 p1 ] // complicated schedules.
8 f" ]; ]( { T) T) I+ I
0 M0 C5 G2 P( o5 X- V modelSchedule = new ScheduleImpl (getZone (), 1); ]3 T0 P1 |6 ^. K8 T
modelSchedule.at$createAction (0, modelActions);
! o$ v. \' O/ U/ b 4 Z. S& t+ | [* W, X5 @
return this;
. c' J% e5 p# N3 l; n9 c* { } |