HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' c: P6 H m. S+ v; D: F% x5 D
$ \+ I! p2 R( h% O8 _/ b- l4 G public Object buildActions () {5 m4 l0 u l& N$ i* Q$ |
super.buildActions();2 J2 ?0 `0 g! {% R
' b/ ^8 b) u+ R& E // Create the list of simulation actions. We put these in
) v5 C9 i* R. m% l1 y9 b // an action group, because we want these actions to be4 D5 K+ J% v( \/ Y
// executed in a specific order, but these steps should
! d' m4 V6 m1 [: V6 j5 K" p0 C* I // take no (simulated) time. The M(foo) means "The message
* j; R }- p9 P+ o$ N! y. r // called <foo>". You can send a message To a particular5 v [ X5 e2 ^6 E- M: |% B2 x
// object, or ForEach object in a collection.
$ y9 A3 H9 F# r& e9 C X
* X$ h8 R/ [8 i# \7 S# } // Note we update the heatspace in two phases: first run! }' Q9 }. ?# j; L
// diffusion, then run "updateWorld" to actually enact the
. O$ c, g7 |7 @7 p! q // changes the heatbugs have made. The ordering here is
) E ?1 _, V" f7 R' H. y8 k // significant!% d3 I V* M% \! }: e5 i. \
1 A: _1 C l* a6 f( e t( `' ^ // Note also, that with the additional
9 c6 F A7 t1 J! G1 ` // `randomizeHeatbugUpdateOrder' Boolean flag we can s+ K a0 }# {4 X
// randomize the order in which the bugs actually run( j! d' |$ u4 E& M, Y7 O
// their step rule. This has the effect of removing any
. {$ [, F% V! D* a% J0 w6 F; J // systematic bias in the iteration throught the heatbug2 D/ {- V5 n) r S
// list from timestep to timestep; F% _2 @2 s K2 K H0 u" O
% _9 Z; p7 `0 L- o3 Q1 L& i
// By default, all `createActionForEach' modelActions have
1 T p# Y/ u( p' R/ x1 g& J' B# ~ // a default order of `Sequential', which means that the7 N2 m9 H5 \8 y X
// order of iteration through the `heatbugList' will be$ L/ i5 U% r* q! t( U: j
// identical (assuming the list order is not changed. b) _* E7 Q9 S8 Y, Q
// indirectly by some other process).4 ?$ ?/ S; I# K
7 p5 G/ g6 X$ A9 }/ M# s# V5 S
modelActions = new ActionGroupImpl (getZone ());; ` g# m/ S8 j. b c
, K) [* ^) G+ q9 o) u try {
' _. M( |- U' {, v! s! F5 M8 u w, w2 k modelActions.createActionTo$message8 z" W4 H* W6 L3 [3 g
(heat, new Selector (heat.getClass (), "stepRule", false));
3 O% Y' _7 w" n$ @& N4 a5 H& Q5 Q; a } catch (Exception e) {! w8 f \$ o! k+ E9 h% p" W9 Q
System.err.println ("Exception stepRule: " + e.getMessage ());
# P8 [4 i! U/ R }6 _8 K' S; l$ A" A
6 S/ Z: B9 u9 S( F- Q1 p
try {9 V" ], d$ q8 g5 p+ Q5 v: J
Heatbug proto = (Heatbug) heatbugList.get (0);
: u7 ^9 R& m) d Selector sel =
( l$ r* M) z4 `! q$ j+ }! j; p new Selector (proto.getClass (), "heatbugStep", false);
- z5 m0 ]( w* P- X: T9 `" } actionForEach =
; Z: h, [% T4 a0 ?0 M modelActions.createFActionForEachHomogeneous$call. s$ _2 T4 {( j9 P# D4 s6 f
(heatbugList,
/ l+ @3 i( B- P7 A4 T7 \ new FCallImpl (this, proto, sel,
' g4 [: _3 K' k" d7 `* G new FArgumentsImpl (this, sel)));
& w( B) K- V" T4 r+ d5 O } catch (Exception e) {
3 j7 E* P0 _, q7 q. X/ u$ ~ e.printStackTrace (System.err);% i+ H: A" {2 v# f
}
* R! `) ?7 b3 @% [9 Z" s! |
* E% C+ U8 N0 r9 {/ ?0 u& c syncUpdateOrder ();
3 H9 O6 [3 r" e
3 n ^" j& i- D# a) } try {0 I/ K" c! z' F% I7 _6 [6 U
modelActions.createActionTo$message
, I7 E8 f. i# ?0 H: l' l (heat, new Selector (heat.getClass (), "updateLattice", false));
- _. _2 u! z% a N# H } catch (Exception e) {0 l- F2 u& g5 N, _. U5 q% h
System.err.println("Exception updateLattice: " + e.getMessage ());
) ^1 i: n7 `; N' i- \% z }
5 f+ P9 R& o6 B1 `) o 5 p6 |) d# {2 B) [9 X$ y1 P
// Then we create a schedule that executes the; A) y# `0 ?- s& ?, P* p
// modelActions. modelActions is an ActionGroup, by itself it& N5 E* _3 E" @ q
// has no notion of time. In order to have it executed in; g* V! D( P; w! y3 [) v* y
// time, we create a Schedule that says to use the
$ y* p4 q- F6 f7 i( e // modelActions ActionGroup at particular times. This+ N/ K; z; L! l: a( ]
// schedule has a repeat interval of 1, it will loop every1 r) q: M1 q" `* ?6 b# Q0 N6 F
// time step. The action is executed at time 0 relative to
* _8 o% d/ r0 e& j // the beginning of the loop.
* N; ^- ^+ Q6 k0 M' G, t
( h g6 b; O/ @9 q h7 o( e7 V // This is a simple schedule, with only one action that is
! @6 p/ U# Z# z. g- m // just repeated every time. See jmousetrap for more
% K8 k* T; R5 l1 j- {8 x% i // complicated schedules.
# J6 K& D* ]6 ]/ m2 ^3 q7 |
9 ^. o) Y" `+ K1 W X1 I modelSchedule = new ScheduleImpl (getZone (), 1);* K' [2 R; X- D9 q
modelSchedule.at$createAction (0, modelActions);
6 E! h$ g. t( X* N/ ^
$ K& e& |6 `" {( ]4 N return this;
: ?( F- ~# a4 h# H. n } |