HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ j# q9 Q+ q7 |! ^9 d
% z# w3 ?- L, ]) q& [: H# k public Object buildActions () {* A' }" Q- t- G$ A
super.buildActions();( [! x- z8 ^! \
$ s4 k* Q" w( S5 @ // Create the list of simulation actions. We put these in+ u7 d+ }' }, ?+ E; q
// an action group, because we want these actions to be& A: i4 ]1 l g& U8 F: Y7 e) b
// executed in a specific order, but these steps should+ E7 g% A0 ]& d
// take no (simulated) time. The M(foo) means "The message! o% \* L7 X% D& J2 W
// called <foo>". You can send a message To a particular
% _& b7 }7 p( V# q* W; p6 s // object, or ForEach object in a collection.
1 M. ~/ {7 m) ` - {$ z. x: a# \
// Note we update the heatspace in two phases: first run
# m/ L- M9 x3 C1 \' K. t/ I d // diffusion, then run "updateWorld" to actually enact the c7 |; h9 u/ P( b3 Q) p! V
// changes the heatbugs have made. The ordering here is+ @& L9 @' N. s9 D6 r8 H9 q
// significant!
8 ~7 U" E( f' l 0 O5 a% B; C" x9 ^' x
// Note also, that with the additional0 \+ Z$ P. ^, y7 J' @0 |
// `randomizeHeatbugUpdateOrder' Boolean flag we can% y. c- y% P3 B
// randomize the order in which the bugs actually run$ \8 ^' n; U( ]
// their step rule. This has the effect of removing any# q2 X6 R) R1 I! P u* y- q7 ~' l
// systematic bias in the iteration throught the heatbug; B- B' F& z5 x
// list from timestep to timestep% j9 |0 F( ~% o& d
+ f- t8 W9 v/ L H7 E' o
// By default, all `createActionForEach' modelActions have
( W: f7 q5 B7 l# f/ q // a default order of `Sequential', which means that the
" c' g- Y/ I& E) h' x% b // order of iteration through the `heatbugList' will be
# W) {. t, N" n9 E3 m6 t, B // identical (assuming the list order is not changed, N9 R. p0 U% l- w" w2 m
// indirectly by some other process).
7 k9 N$ P# L! r h6 k* a
5 E* H: T! S2 J& S, | modelActions = new ActionGroupImpl (getZone ());. n: ~. N* S' G
: t# `- F8 J7 v, o8 [* Y) u6 i try {4 C* S: t7 x& t6 H" y( M+ y+ V
modelActions.createActionTo$message
2 V& O" r' R& F/ g ^# p (heat, new Selector (heat.getClass (), "stepRule", false));
: `4 X* b8 a% z; v; D } catch (Exception e) {' N: b2 u& t/ S% N# R/ F0 z0 |
System.err.println ("Exception stepRule: " + e.getMessage ());
6 u/ m7 w1 O0 Q" E8 @ }* m3 V" Z5 v$ _% W. R% z
& B5 e4 k, p3 X try {
* J3 a9 x7 t3 v6 Q Heatbug proto = (Heatbug) heatbugList.get (0);
6 L* k0 e, u5 M: v Selector sel = 9 R: n4 _+ S$ O/ K
new Selector (proto.getClass (), "heatbugStep", false);* U' e! n7 P p5 \* A
actionForEach =
( T1 `7 h2 U% m7 j3 x modelActions.createFActionForEachHomogeneous$call) C4 q% z1 F" O7 m) B
(heatbugList,: m E: ~1 H {% L& r
new FCallImpl (this, proto, sel,
8 m5 T* N' i, q2 O new FArgumentsImpl (this, sel)));
1 o3 ~ A+ n: K( D l/ U8 X } catch (Exception e) {* S3 N8 J/ R' q8 J9 G
e.printStackTrace (System.err);
" F P% B( E6 t: N- }- w }
9 Q+ c% e; N' H3 I3 l6 V4 y 1 N( ]6 X" o# X) t) ~5 \4 c
syncUpdateOrder ();
2 b5 R" e& } j; e( t6 X. N( B- C
' C5 }4 r( t- \- } try {
' ]/ u- x- Z! Q modelActions.createActionTo$message : A4 l3 \/ T |- R% E8 D5 \8 T$ Y
(heat, new Selector (heat.getClass (), "updateLattice", false));
( g% d3 S* T! Z M9 \7 o } catch (Exception e) {" C: A6 I/ B/ d# b; b8 u
System.err.println("Exception updateLattice: " + e.getMessage ());
& L, E a+ O6 m- e2 a! l9 P }; v" p T1 I+ j2 T! X
1 f9 a' V$ v' Z7 S* d i& U8 N // Then we create a schedule that executes the8 H1 R) w. S( j$ q
// modelActions. modelActions is an ActionGroup, by itself it, A- Q. A! w$ f. m' `/ p
// has no notion of time. In order to have it executed in
; E9 v5 a, h/ p' Z' T // time, we create a Schedule that says to use the. D5 M" T4 O& E& D2 r# ?7 K
// modelActions ActionGroup at particular times. This
; ]# V1 j" l& T$ o' f/ ` // schedule has a repeat interval of 1, it will loop every0 o5 i- N$ l+ p8 F. Z% `% L" N
// time step. The action is executed at time 0 relative to
0 P3 O, H( ?) U' Q; t$ g6 X // the beginning of the loop.& M* M3 ?' t% }6 `" P
/ h) t- q2 {* O1 k3 P // This is a simple schedule, with only one action that is$ i6 |6 U$ T8 {: o$ O9 n% B
// just repeated every time. See jmousetrap for more! u; W h. V; [! `- s0 ^7 ^
// complicated schedules.
; c( ^ R! F+ i$ l4 b 9 L+ `: y) a+ {
modelSchedule = new ScheduleImpl (getZone (), 1);- T& v- ~! r2 h6 [: b3 r
modelSchedule.at$createAction (0, modelActions);# i4 }( K' t/ \8 }
2 }* q$ \$ ^, Y0 d3 S return this;
; Y. W- }0 i& b% D! x8 Y } |