HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 u; {8 L6 T' d) R C) e
0 H7 t, @* ?5 n
public Object buildActions () {5 U' B2 {# Y, ? _, H: E7 b' ^
super.buildActions();) }! s; q( Z! i
" I# E5 Z0 t2 l& p" M' `! l2 X5 L6 t
// Create the list of simulation actions. We put these in
8 T6 e2 H J1 X/ _- h // an action group, because we want these actions to be
0 n( v& }! {0 M! P // executed in a specific order, but these steps should
2 h% D# r" G. W1 u: @ // take no (simulated) time. The M(foo) means "The message
4 F( x+ k2 Q2 B- h* ^4 x0 V // called <foo>". You can send a message To a particular1 ~ F2 X# V, L- g5 k3 w: R* ]
// object, or ForEach object in a collection.0 e4 e; l% `; C5 G" |
) }: K; I* n V% q3 F // Note we update the heatspace in two phases: first run9 N+ R" o, C9 O, g: |
// diffusion, then run "updateWorld" to actually enact the7 n4 j0 m% P) f, D% F9 k9 u* N
// changes the heatbugs have made. The ordering here is
3 |5 S, L% X; G6 [& m* p // significant!1 S8 j7 H) [: Y u% z% R" t4 e3 `
6 }" G8 b$ ^" h R) O4 L9 g# W
// Note also, that with the additional$ `2 n" d) {- d6 Y
// `randomizeHeatbugUpdateOrder' Boolean flag we can: p9 ^8 F3 }; z
// randomize the order in which the bugs actually run1 e" r' X& @& `) t) s
// their step rule. This has the effect of removing any
$ ?! A0 g% E- O$ w // systematic bias in the iteration throught the heatbug; j/ s6 {! K! e
// list from timestep to timestep
+ X2 P- [, ]! y& P
, t) w& `0 \$ p) ` // By default, all `createActionForEach' modelActions have
, @2 C) ?& c: g' Y // a default order of `Sequential', which means that the
8 j( P Y/ Q8 L4 Y, g7 S" `' _+ @ // order of iteration through the `heatbugList' will be
. a# n$ P( n8 ]7 B \6 H // identical (assuming the list order is not changed
% I; \1 ~% i% y" {4 D6 _ H# W // indirectly by some other process).( Z+ v; q5 @. b9 m
$ ?" o/ n8 \& B, b: K, q. V
modelActions = new ActionGroupImpl (getZone ());, c1 L3 z6 z: `* {
0 L7 Y. `9 {0 y7 W# l G try {5 V7 t2 j! I. B7 z4 N0 E
modelActions.createActionTo$message
7 i0 J( v* i& }8 s% S (heat, new Selector (heat.getClass (), "stepRule", false));
8 D0 S S6 [' T. W } catch (Exception e) {! @9 ?5 ~9 l+ {7 B0 n: }1 V4 A4 Q
System.err.println ("Exception stepRule: " + e.getMessage ());
3 q/ @. n I# r4 e& u4 U. a- a P }
9 m- j' R! A' T# C* L8 D2 H1 \/ j/ p# V
try {" J$ I; l2 J4 i) w# ^0 t: @
Heatbug proto = (Heatbug) heatbugList.get (0);% ?0 u- b3 W: q! c# ~. V2 E5 H! t
Selector sel =
6 J5 r$ t) I: h7 ^+ t' N new Selector (proto.getClass (), "heatbugStep", false);% A4 u* c5 D( [; E5 O3 }0 Q
actionForEach =
8 U. W/ O( ^" Q1 h+ r2 B! f$ c K modelActions.createFActionForEachHomogeneous$call
% F' x6 q$ V! p% R9 D5 n1 S (heatbugList,. v9 Y5 E6 p- \% A
new FCallImpl (this, proto, sel,7 B( e7 V0 q8 x" |/ y' N" i3 x
new FArgumentsImpl (this, sel)));) Y! u" E: T! P0 n. J& v
} catch (Exception e) {. T2 f- j# y, ~0 e# U& J
e.printStackTrace (System.err);, E5 H6 S/ ]- d/ P
}, G2 [+ G) a2 t: ^) @
# o5 [$ G: ^, x
syncUpdateOrder ();* I6 d7 I" e+ x# n1 r! {: G$ A
/ I. W9 F. T" T! e try {# I8 C, {; E5 D, o# _% Q. C( h
modelActions.createActionTo$message 2 l# L A* g( g! D# @( [
(heat, new Selector (heat.getClass (), "updateLattice", false));2 Y" a6 E @% u8 p0 h5 n
} catch (Exception e) {; U( j2 f9 M' e- N x0 _
System.err.println("Exception updateLattice: " + e.getMessage ());6 O1 ~2 E2 D2 A) v! e. f
}
4 j' e) M$ T( W) F- z* V6 `+ @ ' w a/ C' { R- ]9 J
// Then we create a schedule that executes the
@! T) l6 x+ t4 ~ // modelActions. modelActions is an ActionGroup, by itself it: {% O7 \; Y8 S
// has no notion of time. In order to have it executed in
, y0 w- j& ^ M5 w; e // time, we create a Schedule that says to use the2 H0 w8 d7 \8 X# d+ D
// modelActions ActionGroup at particular times. This* D- \0 O3 l" b9 h
// schedule has a repeat interval of 1, it will loop every
, T7 j- X; {3 p9 A- {8 D6 m$ O // time step. The action is executed at time 0 relative to m7 W5 u* Q; O4 K- L1 F x# n
// the beginning of the loop.
" T `: R! V% }% E( o0 N8 B4 [1 ]- e0 J& T; F/ }" n+ m# D
// This is a simple schedule, with only one action that is& x/ w/ @2 H; V1 F' P% l
// just repeated every time. See jmousetrap for more7 C* x+ y9 O7 }) n. ^2 s, A5 v! ^
// complicated schedules.
/ s# A+ F: G) U2 z6 b7 i " ?% x& c8 u- g2 P( R1 B
modelSchedule = new ScheduleImpl (getZone (), 1);3 T$ \+ v9 l9 M' G* q, o
modelSchedule.at$createAction (0, modelActions);5 h( T- O4 V- u5 r1 @; `- v7 b Y
* P2 m0 v% H* q3 i0 P' l, J3 L return this;
9 g; c9 ~' z, f& D* H; V) W } |