HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ A& _( o1 \& M" V
* {* p" C2 c- o7 z, g public Object buildActions () {: l- C8 k# r& g. C) h! p
super.buildActions();- e* k- p# C) z5 h
! v# ]& h. @( L. t( E+ C+ {
// Create the list of simulation actions. We put these in+ q0 c, Y- k. ^' s8 O
// an action group, because we want these actions to be( q/ a: ]9 ]. G& ?
// executed in a specific order, but these steps should
6 n' t( y9 e% V; }3 c3 c // take no (simulated) time. The M(foo) means "The message
6 Q* y! W/ L* w6 F s1 R& l+ r // called <foo>". You can send a message To a particular0 H8 _/ h) T( T# l" J* C
// object, or ForEach object in a collection.
8 C. N) C+ X8 Z1 W! i5 a4 P, A ' x. z' B" ?6 k* x- `/ _
// Note we update the heatspace in two phases: first run
* H1 U1 t; K; P8 X7 K/ Y) X, t0 T1 y% q // diffusion, then run "updateWorld" to actually enact the
9 O3 Z3 w" Z1 u+ L/ S9 O, M3 O. P // changes the heatbugs have made. The ordering here is4 X1 k- I; A2 H0 @9 V) g
// significant!4 @8 K. Y' M7 ]% y6 F, j
9 W9 V" ^4 t0 m& O. V: d // Note also, that with the additional2 a0 E; M: ?5 ?" b" s) R& r6 U3 m- i" v
// `randomizeHeatbugUpdateOrder' Boolean flag we can
& w% ^- \% l. t* ?) _ // randomize the order in which the bugs actually run
* D: D' y e; N; u4 [7 W // their step rule. This has the effect of removing any' _. m( c% i3 J. @4 A
// systematic bias in the iteration throught the heatbug/ s. \: M6 z8 w: c% C
// list from timestep to timestep
% \, d; t: a2 K& a8 d
& T* r0 m$ k& f$ y: P // By default, all `createActionForEach' modelActions have/ f, z4 F5 C, z( ]; y' F1 W. K
// a default order of `Sequential', which means that the
0 I8 `7 A1 y E' i$ S5 H // order of iteration through the `heatbugList' will be
: I2 m; K. H o! _& m$ t // identical (assuming the list order is not changed: Z# g/ G1 K$ A: O3 Q9 }, x$ F
// indirectly by some other process)." {3 d- o1 U* X8 \, w
3 L5 v' x/ j+ M6 }" u: ?- h' l
modelActions = new ActionGroupImpl (getZone ());+ n1 D i) B; U) Y
+ Z" x3 ], S, o& y/ i try {
6 g& g$ B7 f5 t5 _/ V1 ?6 a, L1 F modelActions.createActionTo$message
9 n& J2 M9 O6 R! g- X# e/ D) ` (heat, new Selector (heat.getClass (), "stepRule", false));
) _) `! g' @: O3 g( \ V& ~9 D } catch (Exception e) {
& G( T( m, p; N, v System.err.println ("Exception stepRule: " + e.getMessage ());+ D2 `" `7 X1 M Q
}
% b' G* n* L( @1 o
+ Y2 W. Y: u& W8 |+ J/ m try {" V; G3 X8 F& Q% a
Heatbug proto = (Heatbug) heatbugList.get (0);/ Y* k+ ~* z k
Selector sel = $ f% Q/ ~/ O1 N- |' @
new Selector (proto.getClass (), "heatbugStep", false);( P0 ?2 A4 j- d0 l# }+ E9 R7 Q& ]# M2 t
actionForEach =
* a% {0 `7 w/ N- }" Q( I+ F- l modelActions.createFActionForEachHomogeneous$call9 [0 G8 y! p* P, A! o; [- _- v/ o4 B
(heatbugList,) ]* h: f u5 J; p
new FCallImpl (this, proto, sel,, `- S6 X$ j" @* v- Z2 y0 }1 E5 I) V
new FArgumentsImpl (this, sel)));! f9 E' N: o7 V2 }: w" z
} catch (Exception e) {0 \) d; ^1 n3 q# ]( k: l) {* z% h: s/ m
e.printStackTrace (System.err);; l8 v% x% o3 I8 T) B
}
( L2 t- m$ r8 ^5 \# k
$ E5 |+ T5 r/ j) K8 f syncUpdateOrder ();0 p9 k- O; P' z- e' k- o
& ?& c4 A4 {, ~/ p# j1 q try {
3 S& h" i" {% | modelActions.createActionTo$message 9 p5 j7 R( m( v# e6 M0 h9 c
(heat, new Selector (heat.getClass (), "updateLattice", false));& ], ]9 z$ S: U( z8 t$ u- Q
} catch (Exception e) {3 G5 K. K4 n* S% Z! X
System.err.println("Exception updateLattice: " + e.getMessage ());2 X6 q$ K/ ]+ X
}- c* m Z9 t H- ]
# i) i) M; x9 ] // Then we create a schedule that executes the7 v, p4 k1 y8 R4 S' [& c
// modelActions. modelActions is an ActionGroup, by itself it
) c) R' b) K' r; p+ C // has no notion of time. In order to have it executed in& u" B P# M! i, @8 ^
// time, we create a Schedule that says to use the
# W! d& T& `% G! o- a // modelActions ActionGroup at particular times. This
" Y3 q# {/ F, Y // schedule has a repeat interval of 1, it will loop every$ N0 C6 z' P u0 R5 }" ^3 s: n
// time step. The action is executed at time 0 relative to
% A0 }1 v9 S5 O0 ~. o" m // the beginning of the loop.3 O4 [: s- a6 r& y- a3 m
% }4 [) ?, b$ L5 g
// This is a simple schedule, with only one action that is& [* @- \) c7 R$ Q5 G% E
// just repeated every time. See jmousetrap for more& D M# k3 F8 a' W
// complicated schedules.
* Q0 ~! I9 s3 X' V& `3 m1 Y8 b 7 r8 k3 o7 z5 [& F# c3 j( M& v& n
modelSchedule = new ScheduleImpl (getZone (), 1);
" w% ?7 N! Q& n' U! g modelSchedule.at$createAction (0, modelActions);
: e- d5 ]1 _4 a0 a% s3 p$ I - h9 K. ]( v3 {1 |8 t1 Y
return this;/ w: b$ z# }7 }+ f
} |