HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 h' i7 G X+ m$ H( V& [9 H8 S
/ [$ w' s- C2 g5 R$ t f& b7 O. K public Object buildActions () {( o# z8 b' Y; m! q" b
super.buildActions();
. t& V% Z$ {3 T& `8 I( O( {- j 8 Q; u$ r4 F% p; E# d {
// Create the list of simulation actions. We put these in
+ s* z) x" G4 ~$ W% M! `; L // an action group, because we want these actions to be# B$ S* {# C; o
// executed in a specific order, but these steps should+ A9 g! T& A. x Z J* F D
// take no (simulated) time. The M(foo) means "The message
. G* P# s7 f, a' ^( K // called <foo>". You can send a message To a particular2 j6 j; z) f2 y# @7 s
// object, or ForEach object in a collection.( Z4 k8 ?$ w) |: O" Z
+ e5 b2 a7 c! H7 Q
// Note we update the heatspace in two phases: first run
" L: n4 ^/ ?1 d" F8 W6 u // diffusion, then run "updateWorld" to actually enact the
0 x2 q# e" v" x# x2 ? // changes the heatbugs have made. The ordering here is
( j& J8 ]; ^' S( |! u! T$ V // significant!1 o* C5 f, u) a$ ~, F
) \, O8 y$ l. d9 x: l" E2 i- P$ H // Note also, that with the additional5 s2 z2 P/ y6 Y- K% D: Y6 k8 _
// `randomizeHeatbugUpdateOrder' Boolean flag we can6 C8 y' ]7 H0 n8 k8 @! g
// randomize the order in which the bugs actually run5 N3 ?) o3 `& c' J& u4 Y
// their step rule. This has the effect of removing any/ s0 F0 b6 Q1 G- n
// systematic bias in the iteration throught the heatbug, }& M; `* |- n/ L
// list from timestep to timestep
- e8 ]# Z- M8 u- m- \3 v- u
- g# i6 ]0 J1 I5 ]! x; n // By default, all `createActionForEach' modelActions have
" T/ K6 |& G1 P* N- P5 S' I! Q // a default order of `Sequential', which means that the
6 N. E5 M$ M* m- b2 P+ Z // order of iteration through the `heatbugList' will be: Z) T% T2 Z4 m) m8 q) b4 ?. M
// identical (assuming the list order is not changed
7 F/ T; G# \, D6 y# ?9 a5 r // indirectly by some other process). L1 S; I5 S! j+ f2 N0 p# n' O: t$ Y+ ^
8 x$ m+ r/ ^* E* A; S# s! N: ^ modelActions = new ActionGroupImpl (getZone ());" H* w5 {! Y3 W! ~
# p, b# K/ }$ t
try {9 p1 K7 w2 }1 q7 @
modelActions.createActionTo$message" Y+ e- N# C) d+ r) A2 e$ q4 L* u
(heat, new Selector (heat.getClass (), "stepRule", false));
f+ j( u3 v. i& n+ Q } catch (Exception e) {/ ^ E# u6 L) b+ k" g+ f8 j$ ^
System.err.println ("Exception stepRule: " + e.getMessage ());- I- k2 w+ G; G
}0 u3 u' T( R- ~1 H6 P- c
' X0 t0 U, A, o try {
+ i% T' N7 n) g7 ? Heatbug proto = (Heatbug) heatbugList.get (0);: }/ u" |! {$ Q; t, p* n5 B7 P
Selector sel = + n7 U# V7 _4 W
new Selector (proto.getClass (), "heatbugStep", false);7 ^3 P7 b3 ~; C# I2 {6 s2 T/ H
actionForEach =
) d" B$ A9 P$ _# E. Z7 p modelActions.createFActionForEachHomogeneous$call. b4 S( V' s2 e- L3 s r& y
(heatbugList,9 E0 u6 w& g1 y+ Q$ ~# @" d9 `
new FCallImpl (this, proto, sel,5 n3 c; q4 E5 t; A4 \) h- N/ e5 t
new FArgumentsImpl (this, sel)));
1 Y8 T% C1 d( t! h4 | } catch (Exception e) {
e( L7 h4 C7 E* n5 V. \4 H e.printStackTrace (System.err);
! m' ^1 ^9 |; Q- g0 C: v$ \ }
* |8 h ]. q6 j2 p5 _0 t$ i. | . f; L% A! u, r8 F2 o- P
syncUpdateOrder ();
) ~4 Z" y+ V1 m4 |" X1 Q6 o' a: c: f) i6 |
try {0 F- g2 H$ e4 W! A
modelActions.createActionTo$message ! q6 \1 W" _3 |, ~
(heat, new Selector (heat.getClass (), "updateLattice", false));
3 A* x: D1 R( J+ _* y7 |- B } catch (Exception e) {* Z3 M' v+ K/ V/ S0 m( }3 b- v
System.err.println("Exception updateLattice: " + e.getMessage ());5 v1 y/ @5 u# u; P. F0 z
}$ I5 } S( q( J4 K5 F& O
( }7 k5 _# |7 h ?* k" B
// Then we create a schedule that executes the
% E% Q* ^3 D8 L9 c // modelActions. modelActions is an ActionGroup, by itself it
. T D7 i# p$ {% w. Q z // has no notion of time. In order to have it executed in3 n7 X& l' V! @5 O& ?( Z- K( C
// time, we create a Schedule that says to use the4 n5 c4 M! M9 M. q. `/ y
// modelActions ActionGroup at particular times. This
" G6 x6 @: c& c/ X9 K8 s- s& o // schedule has a repeat interval of 1, it will loop every
. G8 ^% ?8 n+ l' x2 a3 Y9 v4 X // time step. The action is executed at time 0 relative to6 S! \% z6 o! V3 S8 t! W
// the beginning of the loop.
* U4 t7 t, c/ \
4 S4 E4 q! w" K+ T$ B! j // This is a simple schedule, with only one action that is
, F, M' l- D8 h1 ^( u( x0 N // just repeated every time. See jmousetrap for more- x) v$ ~* b% T ~0 H8 d
// complicated schedules.! A5 l) x# w8 f! k- I3 {! H% h
' f3 E7 ]8 e+ r m# K6 w! {+ c
modelSchedule = new ScheduleImpl (getZone (), 1);* W6 y$ y/ F* N
modelSchedule.at$createAction (0, modelActions);# }; ~$ j$ j/ _8 z" {4 ^: O8 i6 e
1 r& J( A/ L# O' Q- C- m
return this;
( y% u0 v; [" L: E: ~ J } |