HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 \ j |' W, e5 S
) I1 Z' v! l3 B public Object buildActions () {
) @3 A0 h3 Z, p/ m1 f6 l super.buildActions();0 Q6 R* D9 e+ }4 {3 w) G
$ q C4 W5 a. H+ @; W
// Create the list of simulation actions. We put these in7 S) t( ?% O5 _; @3 g& J% y( i
// an action group, because we want these actions to be) Q% ?3 L1 y$ n
// executed in a specific order, but these steps should9 ~% F7 c7 O5 x8 C: x
// take no (simulated) time. The M(foo) means "The message3 b2 O3 a7 s2 S/ ]
// called <foo>". You can send a message To a particular* d/ }# `2 b4 I3 T x3 g; d
// object, or ForEach object in a collection.
9 l5 s" \: `" v! X
; F7 k& n0 h# f3 g // Note we update the heatspace in two phases: first run* y( N& `# }! w& e( P
// diffusion, then run "updateWorld" to actually enact the
2 f- m+ ]+ C- z9 }! o+ p // changes the heatbugs have made. The ordering here is' ^- h+ d8 X1 j7 \: b, c. z& w
// significant!& R/ j. H N6 a& @9 k9 |- K
p+ f8 i, k6 [; _; j: {
// Note also, that with the additional
5 Z$ h' C& n! l9 X @ // `randomizeHeatbugUpdateOrder' Boolean flag we can" k- \8 z& E: U1 N6 [9 o
// randomize the order in which the bugs actually run$ _* _) k! t! ]# p: m
// their step rule. This has the effect of removing any
Z+ h. c6 e/ Z; O // systematic bias in the iteration throught the heatbug
! [7 B. r6 f' ^5 M5 O" ] // list from timestep to timestep
8 D1 x; j% C% ~% ?
8 i/ C9 C, V# N. t9 c n // By default, all `createActionForEach' modelActions have; h1 F' S) s) r
// a default order of `Sequential', which means that the0 g- e- c$ W+ I
// order of iteration through the `heatbugList' will be
* @) c6 ?7 X$ I7 l: c( I // identical (assuming the list order is not changed8 h: `9 [9 Z/ w* r7 k
// indirectly by some other process).
/ ?1 Z6 ^, ~6 y
1 Y# t9 ?3 x0 J! _, P modelActions = new ActionGroupImpl (getZone ());: F, r* b6 }) @2 N! o
b+ h& x6 Y6 Z" z; S
try {5 A7 I/ X: N* B f* f! G5 z
modelActions.createActionTo$message8 p9 F' s. i; w& h: l; ^
(heat, new Selector (heat.getClass (), "stepRule", false));" L! Y# V! R$ X/ J9 R" n
} catch (Exception e) {, w) B$ Q1 n* o, w% C2 }. W
System.err.println ("Exception stepRule: " + e.getMessage ());& B7 S, i1 z: b1 B) g0 f* C8 O
}' j+ g7 w4 u" H5 c/ \ E* }3 a
+ _& l& C7 P' }( V# s0 u try {
' K: V; z2 ~4 a- q1 ]* r: G$ `- c- r0 q Heatbug proto = (Heatbug) heatbugList.get (0);
' Z: K) z- F7 G0 |0 J) O Selector sel = : G; ~. z% y* [8 \$ C0 V
new Selector (proto.getClass (), "heatbugStep", false);" M# c" m: e2 D" b9 w
actionForEach =% c3 D( w* q) L& w4 R* h3 t/ Z. M* n
modelActions.createFActionForEachHomogeneous$call
1 ]8 G. q6 P, f9 H (heatbugList,
7 \$ f( c9 \: X# ~. P new FCallImpl (this, proto, sel,
. m6 A4 s2 B. c3 K7 J0 V new FArgumentsImpl (this, sel)));+ A- C( E7 O+ ]" i* K8 v
} catch (Exception e) {
: E- j6 I4 q+ Q" I. p e.printStackTrace (System.err);; D2 X, B; J" a/ u9 M
}" u) G! p) \# I. e( [& v! B, G& N
2 p, z- y5 b3 o, c3 g/ z+ E" d& b3 K syncUpdateOrder ();. F( F! ?9 Z# J# I( @
8 D- x6 B! T8 u try {
9 N7 b/ b J& v2 m& H& ] modelActions.createActionTo$message
' i: @# ^$ p6 `$ l( Y (heat, new Selector (heat.getClass (), "updateLattice", false));
' v3 Z; K+ _ q1 g5 H, \( y } catch (Exception e) {. g# ^, X, K1 T0 J7 j/ y
System.err.println("Exception updateLattice: " + e.getMessage ());
4 t0 S2 Q! T" ^0 F; b* o0 p }
$ s4 y- E( m$ }) {/ @
0 ~ O- N# \: q // Then we create a schedule that executes the
7 x- N/ s, R4 D // modelActions. modelActions is an ActionGroup, by itself it
1 U1 Y+ l$ c: Z8 o // has no notion of time. In order to have it executed in# i) ~2 g x% ^" v6 ?. L& M0 Y
// time, we create a Schedule that says to use the% e% }' C O/ Z1 H$ n+ y6 D: N
// modelActions ActionGroup at particular times. This" }. I8 ?- e: ^" H0 F) P2 f' ]3 h
// schedule has a repeat interval of 1, it will loop every
. o; {% R! n/ w' ~1 M // time step. The action is executed at time 0 relative to: @7 r3 o- w2 ^* E
// the beginning of the loop.; [+ b* a7 h- }* M, v9 g1 y* U
9 D# R: V+ K% V, k( e# v // This is a simple schedule, with only one action that is6 d( k" ]% Y2 \$ z% w' K& @9 v
// just repeated every time. See jmousetrap for more# N8 L) B$ Y) C. [# G
// complicated schedules.; F4 ~2 y' I3 ?' z8 L, K8 f, R
% s2 l+ W$ Q" D. j3 s( D- M& ~( E modelSchedule = new ScheduleImpl (getZone (), 1);
' v' ~' U7 p5 w7 q1 `" n, S6 Z modelSchedule.at$createAction (0, modelActions);' \' B& m2 n. b$ I) c4 J8 N
& Q2 u/ V% |5 n% k9 ^ return this;
4 X5 U2 ?- j' ?/ G+ p } |