HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 {- Q7 R5 _6 i9 x% f6 @8 `1 h9 ?
4 s O% B! Z* @1 F! R public Object buildActions () {$ B, C# m0 H6 U9 H& U' y
super.buildActions();
' d$ ~4 N8 H3 |. k1 o# `: e 0 J* r/ V; D: |: s9 }4 x
// Create the list of simulation actions. We put these in
& ]# x3 `- n0 v) H) ~/ ^ // an action group, because we want these actions to be
" {* }& W2 W/ @( v2 I6 u3 o/ [ // executed in a specific order, but these steps should, ]6 H2 J+ Y- {4 T. K( ?
// take no (simulated) time. The M(foo) means "The message# l3 B9 A( \+ a' p
// called <foo>". You can send a message To a particular
( {& ~0 X- ]# `' [9 m# u! M+ O // object, or ForEach object in a collection.% a& E% k3 e( U6 X3 t8 H
; ~/ j" q. r) ^
// Note we update the heatspace in two phases: first run) m! u; K4 Q5 r8 M( L! j" p4 A
// diffusion, then run "updateWorld" to actually enact the: u: c0 S! O; ^2 [5 X) J' Z
// changes the heatbugs have made. The ordering here is
0 h, s4 M5 J; K s4 `! @- N // significant!4 i5 G: N' k3 h
, b) e6 D6 L- }) R
// Note also, that with the additional
! e& \7 I- H, U6 Y9 x // `randomizeHeatbugUpdateOrder' Boolean flag we can
+ i+ { f+ n4 N, f ~& w // randomize the order in which the bugs actually run
. _7 Y- a, T b4 P6 b1 _6 m! V // their step rule. This has the effect of removing any1 i. [# y; Q) C# G: F( y3 M
// systematic bias in the iteration throught the heatbug3 d5 U% `. R" m$ A. O
// list from timestep to timestep
1 q6 ?6 i2 z( c) I8 V $ \4 g% v7 d7 n8 U) E$ D% {5 w
// By default, all `createActionForEach' modelActions have
+ [/ a$ p, |" x9 p2 O- ~ // a default order of `Sequential', which means that the
, ?0 j* E( u4 u% m // order of iteration through the `heatbugList' will be8 ?/ h5 W, m/ t0 W+ t ?
// identical (assuming the list order is not changed
& Z/ v7 B5 E- J3 Z8 M // indirectly by some other process).
8 G* d7 n. L. c7 w2 K7 N8 R " I' q. M6 g7 B
modelActions = new ActionGroupImpl (getZone ());! L8 C" Q# N# @4 I- l' C( }. w
% P: o4 u# g1 b' V/ [! D
try {
/ t+ V9 l- K7 m: q; x. ] modelActions.createActionTo$message0 x( k5 R! r+ E& I
(heat, new Selector (heat.getClass (), "stepRule", false));
; @- H5 x+ v, v1 q) g } catch (Exception e) {
" k5 K8 _, J' g X1 S System.err.println ("Exception stepRule: " + e.getMessage ());! d4 `! `3 C# G, e) S# u
} c- R5 r. u! p ]
6 F- v; T6 i Z0 p7 d- x" v/ S
try {
% H- [1 u6 e7 Z0 q& R% T Heatbug proto = (Heatbug) heatbugList.get (0);
7 v4 Q# U: f' c k p2 x Selector sel = # p; q; J/ z1 n. S
new Selector (proto.getClass (), "heatbugStep", false);& k1 ]+ k/ B9 J5 p3 n2 L: h5 ]
actionForEach =
, b m% c; k6 m2 t: F5 S modelActions.createFActionForEachHomogeneous$call
) a. W/ Y4 l- | (heatbugList,
7 z" l) [" U$ ^2 [ new FCallImpl (this, proto, sel,1 c' o- P' ~8 p
new FArgumentsImpl (this, sel)));
" {. Z+ H' s# v* J9 \ } catch (Exception e) {
: {; A; _+ X, y4 u: y9 D+ s e.printStackTrace (System.err);5 X' K1 o5 u7 ?5 W
}
* b$ L7 A/ |+ @, N! `# ^ ; R1 S9 x. J8 K. s( E; c! N
syncUpdateOrder ();3 P. g" ?. y$ B0 c
4 z$ i" M- W+ c1 E" ?; R
try {9 M, @. Q6 B$ q% _
modelActions.createActionTo$message
8 H% _7 z k7 z2 m! r" F (heat, new Selector (heat.getClass (), "updateLattice", false));
# L) v7 u j- ~" N) q } catch (Exception e) {% a' a7 [; P- h _3 b, L. ] G
System.err.println("Exception updateLattice: " + e.getMessage ());
, B1 d' u J. t" ` }
9 c! Q$ e0 Z; H% C* r 7 j/ b% z$ x6 }- F ^" B
// Then we create a schedule that executes the: m& l' n3 x8 w5 R$ P
// modelActions. modelActions is an ActionGroup, by itself it
- N3 x* U c8 t$ Q // has no notion of time. In order to have it executed in1 ]( O% e" x4 g7 s2 i6 O* F$ V
// time, we create a Schedule that says to use the N+ G4 {4 b5 Q0 I* h. ]6 b# R
// modelActions ActionGroup at particular times. This
5 s B0 a" B. [- l- I3 ]5 N // schedule has a repeat interval of 1, it will loop every
; g1 {2 n& q3 f& d! Z" {, V# R // time step. The action is executed at time 0 relative to
8 U; I! {" N0 E# Q) @% g; | // the beginning of the loop.; K% {+ \ h: r; |0 x
. e- H- ]6 H2 b. z // This is a simple schedule, with only one action that is
7 {' T! @9 P% `4 h6 U5 b, \4 J // just repeated every time. See jmousetrap for more
3 b9 A" P1 m h( I' ` // complicated schedules.8 a5 k/ F) D2 Q5 o1 D+ Y5 L
& c' ~: N% _: \" a
modelSchedule = new ScheduleImpl (getZone (), 1);2 V2 g$ G7 p% o
modelSchedule.at$createAction (0, modelActions);
+ I5 ]. c! D- I- j1 ~
7 B1 o3 W+ Z# i return this;
. _! z, h1 ~ {" h8 M. m } |