HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ H L5 C" W# |, C* E/ d0 C5 h3 G" V! E: b6 [" _6 J
public Object buildActions () {& d$ f4 h+ L' ~0 u- b8 Q
super.buildActions();
/ ?' h3 H+ T0 U
% o0 ?9 [( A+ ?' ~+ L; d' k! w# e- s5 @" V // Create the list of simulation actions. We put these in2 A7 Z F# h, P8 \7 G8 @" r
// an action group, because we want these actions to be( H8 g" m1 ~( u9 u
// executed in a specific order, but these steps should
2 A, E% B" v# Q1 |" ~2 G% w: n // take no (simulated) time. The M(foo) means "The message
U, {% C' @0 n: d3 y8 O9 e3 x // called <foo>". You can send a message To a particular( J* L# B/ h. H- r, x! `
// object, or ForEach object in a collection.
) M2 I( n* m# V1 ] 6 z7 N d# T0 G2 A7 P$ @
// Note we update the heatspace in two phases: first run6 b) V) s- p9 C& h: W: g- U/ o) w
// diffusion, then run "updateWorld" to actually enact the
G7 p4 |& F1 R8 K# u // changes the heatbugs have made. The ordering here is
% x5 D- q& ^& j# U; k# ~, F4 w5 K // significant!9 B' y0 W! m C2 D! e, p1 ]
7 {% [7 V# |1 Y2 N$ R // Note also, that with the additional4 J# Z D- G6 j6 _2 r; }$ D
// `randomizeHeatbugUpdateOrder' Boolean flag we can
' B5 U' ]; r5 \* _1 p! o3 P // randomize the order in which the bugs actually run* I1 l, u- |2 M! e# c% J6 ^; @
// their step rule. This has the effect of removing any, c4 {5 y: V- {* C9 R' \9 u5 h
// systematic bias in the iteration throught the heatbug: j s+ ~2 }0 S: \ Q3 k
// list from timestep to timestep
6 D Q4 E1 h$ a
' k1 U9 y+ I0 ~/ p: r9 D) U6 c // By default, all `createActionForEach' modelActions have
1 g' W# i- u6 m6 [, s // a default order of `Sequential', which means that the
9 L5 i/ A/ f" W: U: Z U% L // order of iteration through the `heatbugList' will be: f& u8 r) ?3 [! `; l9 X
// identical (assuming the list order is not changed; H. }% I; i- @# _$ l$ E5 Q1 G" S
// indirectly by some other process).9 W3 C1 `! p* H0 O
9 i3 b! ]6 m- Z! [' e! Q
modelActions = new ActionGroupImpl (getZone ());9 p, S2 E: Z3 T- m3 Z: X# x& U
4 y; f& C9 g v( m try {
) v8 D) v. L+ s% s7 t& @& W$ G modelActions.createActionTo$message
9 o" m9 P! | T+ I (heat, new Selector (heat.getClass (), "stepRule", false));6 i/ K! E: |) _, e6 b# B
} catch (Exception e) {
" S" ?* Q: ?. e/ r3 r# ^ System.err.println ("Exception stepRule: " + e.getMessage ());! w/ d- e2 w, A8 }* F" x/ V& ]
}
; A) D3 r" i2 T1 s" Q3 |3 b. s' Q* k
try {
3 c5 ]) X3 M% w! b' Q' ] Heatbug proto = (Heatbug) heatbugList.get (0);1 b/ D% ]0 x, F! C5 |) L7 A
Selector sel =
$ E. h" T, r3 C# z new Selector (proto.getClass (), "heatbugStep", false);
* d; O% S3 r" p S4 K actionForEach =% @# q* u& X/ F. L7 D( C
modelActions.createFActionForEachHomogeneous$call
; T8 u/ {4 r/ u( `; w, V (heatbugList,. H. E& Q* A. N- L; M& x$ K1 R* G: Y
new FCallImpl (this, proto, sel,, ~1 G0 t7 B5 V
new FArgumentsImpl (this, sel)));1 J6 z5 K5 q& h1 Q& i' V2 \
} catch (Exception e) {
) x& T+ e$ p. F5 G9 S e.printStackTrace (System.err);
/ j' f* m! ?! [+ m4 s }! R! R* S# b M! h4 g3 E5 P5 k Q" _
0 y5 _5 x- ]2 F; p: G syncUpdateOrder ();
! T0 d& P$ C. J1 M: m
( u! ]. \1 Z! R6 k try {
* w9 d3 {. z3 L/ e- |' n modelActions.createActionTo$message $ v- u3 W r; X
(heat, new Selector (heat.getClass (), "updateLattice", false));
2 t# |3 r$ U9 T! E7 E) C } catch (Exception e) {8 u# m( c* o' B5 m, B" Q
System.err.println("Exception updateLattice: " + e.getMessage ());% l$ V: r1 G7 z \/ S
}
) v- X$ ~+ o9 C
4 C# l; a& W* B _0 m! w% m- P // Then we create a schedule that executes the
5 @# ?, W& H% `. q+ x& L+ g // modelActions. modelActions is an ActionGroup, by itself it
- H5 V& m$ B7 D# }% V( K" m, s // has no notion of time. In order to have it executed in
. m8 \! c* {% t1 W0 D- C* R' ?6 v // time, we create a Schedule that says to use the, }/ f: V1 X) P' i
// modelActions ActionGroup at particular times. This
! n9 @8 p4 Z( z( ` // schedule has a repeat interval of 1, it will loop every
$ \9 T& ?" W( Z( P' e$ Z // time step. The action is executed at time 0 relative to, \5 t/ w) P) y5 P! l
// the beginning of the loop.8 C4 ~6 P4 i/ X6 \$ r
+ p p9 P5 F6 H
// This is a simple schedule, with only one action that is
" N) S& J& D! ?1 N( I // just repeated every time. See jmousetrap for more. e9 | _0 E- A; W2 E
// complicated schedules.1 Z. r, {6 q& C* b l7 f2 O
X9 r' P& p* y( U2 W2 S3 c
modelSchedule = new ScheduleImpl (getZone (), 1);
( N( [# H, y% g* p( A$ ? modelSchedule.at$createAction (0, modelActions);
9 }* n( G! U+ ^& p
+ D, L8 L: W" G, v return this;! x a) F Q! b, S
} |