HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% o }' c" x ?2 v. m0 G! M, I2 H7 P! @# i* ]; E/ H
public Object buildActions () {8 H/ N2 C* v9 u5 l4 X
super.buildActions();
6 S; r( m5 Y9 F# U; i& t + x+ A7 @8 X& P& Y. G* @: m( Z
// Create the list of simulation actions. We put these in( B( r1 Y# d% F2 M
// an action group, because we want these actions to be/ w5 I; D' u j$ n5 G$ f( o
// executed in a specific order, but these steps should A0 O, `, g% L: T- w W* F9 L
// take no (simulated) time. The M(foo) means "The message
3 C9 A* ~# |7 Q) r // called <foo>". You can send a message To a particular" E6 A) K9 M( J# M0 G, a6 m
// object, or ForEach object in a collection.
" q( Z" S. F0 r- ~, @4 y' G 5 x, `3 M5 M `7 E4 z. \- U# t
// Note we update the heatspace in two phases: first run
$ e- x- ^; E( @8 Q7 e5 z6 } // diffusion, then run "updateWorld" to actually enact the k5 j! ~: c) K5 w
// changes the heatbugs have made. The ordering here is
& p* j5 a& V1 c+ E# G // significant!/ s" O5 d3 C$ Q7 q; {, M
0 B* t5 i- Y# ~
// Note also, that with the additional. I3 u2 `# j( N" I" v) B( n/ i i
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, T9 P# A7 B1 z! ]' @6 S // randomize the order in which the bugs actually run* I* F {$ A8 O0 n* i
// their step rule. This has the effect of removing any
' v( L" ?6 N2 O- } // systematic bias in the iteration throught the heatbug# k, u! `& S" f: B$ k. ^$ d+ g
// list from timestep to timestep
9 y1 L2 h5 ~# F2 o& [5 `; H
7 }! n. j) l5 Z6 t // By default, all `createActionForEach' modelActions have
1 _" @% [) D+ P: V1 U4 b) E // a default order of `Sequential', which means that the* x! h! w5 P3 {' e4 f- p
// order of iteration through the `heatbugList' will be. ]! V( b6 z6 G
// identical (assuming the list order is not changed
& N* L! s8 T; b' N0 o9 ~* M. p0 w7 g // indirectly by some other process).! @' R, N4 P1 A+ n
" Y* ~; P+ y+ }* n modelActions = new ActionGroupImpl (getZone ());
1 p4 v7 n3 p0 Z
0 }( e' a6 }7 w# L try {
6 Q. M4 O* w+ D* { modelActions.createActionTo$message0 H2 \! d3 d# A
(heat, new Selector (heat.getClass (), "stepRule", false));! y% M, A! @- G
} catch (Exception e) {
- {/ w0 c, d" y7 F8 y System.err.println ("Exception stepRule: " + e.getMessage ());
; l$ B0 H! |: p1 J9 j( L6 } }
; @/ i' j9 F d, V0 [: g" h- a' R( {
try {
2 |& B! Y9 |6 F0 P Heatbug proto = (Heatbug) heatbugList.get (0);
/ F1 s1 L9 T% F: I* Y( i0 i7 ?; I Selector sel = ! N2 O/ f5 z, X* n6 X
new Selector (proto.getClass (), "heatbugStep", false);
! C$ O7 @9 W8 H& D& I! X- U' g5 U actionForEach =0 Y& }9 n2 o& y$ t' W! L7 ~
modelActions.createFActionForEachHomogeneous$call
) V1 [; ~8 w3 ?: S$ c8 V (heatbugList,
$ D4 J0 w$ M. C5 j: u new FCallImpl (this, proto, sel,
8 h& l7 N: s- F1 T new FArgumentsImpl (this, sel)));
. @( {- y& [+ F! b } catch (Exception e) {3 {9 m$ |. t1 F- F' f
e.printStackTrace (System.err);$ X' V' p' c* P: A6 M6 W
}3 C& r, ]8 ~, @3 F
2 j6 H' A! F' o
syncUpdateOrder ();
, m: Q( P8 H( W/ F) l9 P
( |9 n$ |+ P4 N' w, Q try {1 Y7 N0 k9 `" h$ J# g' i# ^( e
modelActions.createActionTo$message
2 [% y8 u6 b4 F$ p (heat, new Selector (heat.getClass (), "updateLattice", false));+ H: ^; f' O R/ \
} catch (Exception e) {4 m$ P' K i8 s0 ~
System.err.println("Exception updateLattice: " + e.getMessage ());5 P& g1 Y4 w" X1 b
} s# Y, p7 K8 ~& \% r
0 w. f5 d4 d1 [
// Then we create a schedule that executes the
) x# h, M, G( Q' m' [6 s' f // modelActions. modelActions is an ActionGroup, by itself it
# Z" `: b( Z! @) a7 ? // has no notion of time. In order to have it executed in
/ y8 Z% b, u9 Y. b // time, we create a Schedule that says to use the
) Q$ g: w, k( o3 X7 x V // modelActions ActionGroup at particular times. This* g5 S/ f- J2 H# x6 E$ e9 G
// schedule has a repeat interval of 1, it will loop every
9 _. \( _& g1 u3 m8 @ // time step. The action is executed at time 0 relative to
" `, O- z0 R' a- F // the beginning of the loop.3 Y. y# U9 h8 p* N+ \
2 p7 a0 L) ^. _' Y5 P' F7 u
// This is a simple schedule, with only one action that is" k+ z! N( O Z Y9 p) ?& o) _/ F
// just repeated every time. See jmousetrap for more- Y3 e8 S" T0 S) z3 {
// complicated schedules.
& u* J7 R* ^6 L+ S5 X/ A7 c3 T
. ~( L& e$ u7 N2 ~" _' o) z modelSchedule = new ScheduleImpl (getZone (), 1);
- Z$ x$ ~7 r: i% z% t modelSchedule.at$createAction (0, modelActions);5 a' w% i" a/ S+ e
# a/ H: Q6 ]3 S+ [
return this;3 G w Y4 t& D; k% D
} |