HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
4 Y4 G& R8 P/ E; N1 [
' A; ^# w8 y. b' B- b m; D3 Z9 H public Object buildActions () {3 V& h+ B0 _! C
super.buildActions();! ~1 B1 K, W; P- C/ i( f
- [* g9 Q8 H% x9 Q$ C
// Create the list of simulation actions. We put these in0 }* X5 J# `5 K0 _) U, H" h
// an action group, because we want these actions to be% E8 q, I5 W9 w/ Q; r* @0 f* G
// executed in a specific order, but these steps should
* A C9 I7 t( \: f' x // take no (simulated) time. The M(foo) means "The message+ e8 j7 @8 i* B: @$ W8 @
// called <foo>". You can send a message To a particular: ^: g/ Y8 {" ?9 l
// object, or ForEach object in a collection.
: v; R1 m. L! u5 T3 ]& J ' F) f9 A' Q8 t8 z) k0 \. _" g
// Note we update the heatspace in two phases: first run
0 `/ `! B: b6 M# E- c // diffusion, then run "updateWorld" to actually enact the
|1 p5 t1 s4 P" g // changes the heatbugs have made. The ordering here is( M, _8 E4 Q6 |. j: U
// significant!
3 L/ D+ _2 E9 v/ @3 W0 K
' V0 V& j( ]9 L p- d% v // Note also, that with the additional' Q5 H* F4 [% x2 l6 g# l
// `randomizeHeatbugUpdateOrder' Boolean flag we can9 ]8 B1 {& ~1 `- \1 J
// randomize the order in which the bugs actually run8 F+ U7 y) f# y$ _" T9 [
// their step rule. This has the effect of removing any8 N8 f3 B4 T$ d: K* I1 F
// systematic bias in the iteration throught the heatbug
; e" _8 q N6 x1 v. F$ K0 Q" v( v // list from timestep to timestep9 b, N! X' W" k2 A
2 ]2 ?/ Q3 Z& L. S% }. k
// By default, all `createActionForEach' modelActions have: ~* W9 i7 z( A- a+ ]& D
// a default order of `Sequential', which means that the
" m9 \7 v2 T1 l% b+ N) c+ E; a9 A- U // order of iteration through the `heatbugList' will be
( g$ \& S* f. c4 _ // identical (assuming the list order is not changed o" s& m! B! j) `. N
// indirectly by some other process).
/ c& S1 @/ x* d2 ?$ U; { - {3 o# i: G/ e: ]) v( e1 ^
modelActions = new ActionGroupImpl (getZone ());; D( O. m3 t' x9 |. V. w
, M, i) n; \7 t6 c try {
- k+ h% E; z, q" t( s0 k modelActions.createActionTo$message0 o8 f+ `5 R9 z7 \' k) C
(heat, new Selector (heat.getClass (), "stepRule", false));
, ?( u: h6 T6 _( E& {' C$ z- S0 C; T } catch (Exception e) {6 ]" x( Y1 [2 E4 Y
System.err.println ("Exception stepRule: " + e.getMessage ());
6 `+ X, g& r) Z! ? Q7 m; H }
) o$ k, A; O) c) K) U
9 J- R4 E1 z+ W, |* N2 K4 } try {2 I! X. ?, n: I0 i H* x$ e
Heatbug proto = (Heatbug) heatbugList.get (0);
- E6 p& H e2 y- C Selector sel = & |- S- a* p, b' R$ w# H
new Selector (proto.getClass (), "heatbugStep", false);
4 f S6 G* Z; W$ l' ~ actionForEach =
, p/ c: \+ ]& P! d# Q modelActions.createFActionForEachHomogeneous$call
# y7 F4 h# U# J (heatbugList,6 v* W# @5 ]/ S: G) A
new FCallImpl (this, proto, sel,
0 F: e" Q* S3 S' t' I new FArgumentsImpl (this, sel)));. a1 S9 Z8 S* M4 o f
} catch (Exception e) {0 M2 ~7 [) _+ `! Y- F7 a* N( L
e.printStackTrace (System.err);
& u: a N- `; G }$ x# F* Q" o1 ?& h' l8 d
) G* J4 R }( G1 d
syncUpdateOrder ();
/ P, Y) i9 F% s. }. I+ w
6 |9 }# F2 K- D9 k5 J try {. l& v }! r2 H5 t6 F1 X3 c' l% z4 B
modelActions.createActionTo$message
2 U u' W l: u: N+ Z9 L4 w* E' v (heat, new Selector (heat.getClass (), "updateLattice", false));
% h7 E) |- ?: o* ^ } catch (Exception e) {8 }/ x" Q, j0 l; S* w0 U
System.err.println("Exception updateLattice: " + e.getMessage ());
# c$ [$ _9 c) w* Z5 F }1 [& |) r/ t/ m; t+ K) J- a1 l }
& s8 q% } v/ h( h; e1 I9 i) \
// Then we create a schedule that executes the! s! Z: e' {1 P# Q$ h$ X
// modelActions. modelActions is an ActionGroup, by itself it: T( U( x: ?1 |, J9 B- ]
// has no notion of time. In order to have it executed in
( g7 X3 t1 V$ X6 K( G3 D8 {/ U // time, we create a Schedule that says to use the
& X" @( I5 Z& R# W4 h- }* [ // modelActions ActionGroup at particular times. This
7 o3 E9 p9 r6 @. D# K/ u // schedule has a repeat interval of 1, it will loop every
7 m& E" b W1 n // time step. The action is executed at time 0 relative to
& s( A# z5 M! ]" D; N // the beginning of the loop.
/ E: M- W% e- T( |4 L3 D3 v+ i- O7 q. m8 A5 p& z! w
// This is a simple schedule, with only one action that is
4 h: _! R2 q7 ~ T; l // just repeated every time. See jmousetrap for more7 u: M2 z* Y5 t# ?( {
// complicated schedules., m0 F. d( ?) J* p3 H1 w
4 ?6 |4 x4 {4 V" J modelSchedule = new ScheduleImpl (getZone (), 1);# g9 z! C& i. k. s
modelSchedule.at$createAction (0, modelActions);
- F( r; o z+ I5 _- D3 w |' ?
* w; k9 j, y; B: N2 ?5 U return this;
# i5 \9 k& f( \( y8 H" N: t } |