HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- R/ ]/ t/ h. u% K: L1 s2 ]2 e h+ w9 c% `
public Object buildActions () {
5 p: D: b% ]+ c; b' a super.buildActions();- [$ b, P3 |7 a9 c8 T4 M
3 d" X* k; L0 d+ n
// Create the list of simulation actions. We put these in
+ l4 X- l+ j. f7 U& { // an action group, because we want these actions to be* y) c2 _- q; U; r4 @0 H+ v" W
// executed in a specific order, but these steps should
$ x+ W& r+ u8 o; X; u0 q // take no (simulated) time. The M(foo) means "The message% m& t# I ?/ O5 m' u, S6 d
// called <foo>". You can send a message To a particular& L" Y$ s. B" ~
// object, or ForEach object in a collection.
4 X0 r- n( A6 W" L" M
( d; ^- g7 L$ s8 s) c$ v. P // Note we update the heatspace in two phases: first run
$ Y+ n5 F6 F* O // diffusion, then run "updateWorld" to actually enact the
0 P1 K0 l6 Z# N9 ? // changes the heatbugs have made. The ordering here is* i$ c& E( T+ u5 a# p/ }* K
// significant!0 t( C7 B* Q9 x& ?- d5 y
, }' l$ h5 b0 u: P2 {6 g+ ? // Note also, that with the additional& n' T% ^, o3 X4 V7 i7 A
// `randomizeHeatbugUpdateOrder' Boolean flag we can
+ x+ d7 g) p2 m7 G* |4 l) Q) V( I2 y! G y // randomize the order in which the bugs actually run8 E. M5 Z; i2 d: n3 O: ^
// their step rule. This has the effect of removing any
3 n( o# U8 [/ d. W6 u9 J) I // systematic bias in the iteration throught the heatbug
$ Q6 n; O5 F& O // list from timestep to timestep
* H/ I: b, l2 k! C: A
% m; m. _% K/ w9 } // By default, all `createActionForEach' modelActions have# }8 D& z' d8 _- i6 G ?1 l" @
// a default order of `Sequential', which means that the
( H5 a5 _, P; k: Y W // order of iteration through the `heatbugList' will be
# v- n: m/ ^$ D+ F. ], Q$ K) I t: T // identical (assuming the list order is not changed
3 m2 g# {6 v/ M: ` // indirectly by some other process). d- K) t5 ~) v: s2 S
8 G$ j: w# E( _
modelActions = new ActionGroupImpl (getZone ());; c- @ s) U) r! `5 U
* B& }+ f+ I* s* J$ M0 G
try {
& y, q& `* z. P, D5 n7 i+ k modelActions.createActionTo$message) ]7 y( r* E6 e1 t1 P: x# z
(heat, new Selector (heat.getClass (), "stepRule", false));
, P3 y, z* Z5 H8 k z } catch (Exception e) {* J2 [6 |8 u3 d- _- B0 Z _2 T
System.err.println ("Exception stepRule: " + e.getMessage ());1 n6 A. A* M6 m0 p$ k
}
G# ]: Z ~, S f7 y
, b% l5 G" ?0 n1 T% Z1 Y( r try {4 r4 @ ~- @! o; g1 n) M
Heatbug proto = (Heatbug) heatbugList.get (0);
3 M( P" H9 c9 o3 ? Selector sel = # Y+ B' K# \0 L2 K& d' H
new Selector (proto.getClass (), "heatbugStep", false);& p# c+ U' K6 o
actionForEach =
2 p1 @- f9 u' u9 o# z7 v modelActions.createFActionForEachHomogeneous$call5 s% J# m. [ S: N" g" ~3 ~
(heatbugList,$ w% D0 Q$ Q( q I6 A
new FCallImpl (this, proto, sel,: A8 q1 V1 d. o1 _, Q+ R1 w! d
new FArgumentsImpl (this, sel)));& O, W: q% m' X' |
} catch (Exception e) {
' p/ c2 x5 |6 B8 M3 i2 D { e.printStackTrace (System.err);5 o( }# X) x7 K1 X
}
( n# s1 D; ~2 Y3 [
6 L+ O: I4 z R0 T: X syncUpdateOrder ();
/ E4 P% A" `6 P3 q( Z* l$ K( J/ f" d) J, y
try {+ |( `0 V( A; H8 H! W3 [" s# W. X
modelActions.createActionTo$message
7 {! J! ?: B# }+ ?. Q (heat, new Selector (heat.getClass (), "updateLattice", false));
7 M( }0 [1 m6 u# A5 M( o& r } catch (Exception e) {6 y+ ]- O) O7 i' F* U
System.err.println("Exception updateLattice: " + e.getMessage ());% _& p7 W0 ^3 o- G8 ^
}
! z& Y! W8 Z% r5 a 8 e3 {* Y: Q, \* u
// Then we create a schedule that executes the
1 v+ F+ N4 [1 U' u% z) K // modelActions. modelActions is an ActionGroup, by itself it
( i, ]4 ]' s" F- T9 h, R // has no notion of time. In order to have it executed in! _, N% v8 ^1 G- K" H, I. }
// time, we create a Schedule that says to use the
/ U: U% q, g- d; E& ?! e/ h/ T( v // modelActions ActionGroup at particular times. This' Z/ f8 q7 q1 {( r% S
// schedule has a repeat interval of 1, it will loop every) v5 y7 M5 ]" I% L& h4 w- {
// time step. The action is executed at time 0 relative to
% z7 h, E8 D) L' M0 c' c // the beginning of the loop.' ?9 N& n; w# O# P7 r
3 E( k/ B' ]% n! F: O3 r
// This is a simple schedule, with only one action that is; ]- G6 h* q4 M
// just repeated every time. See jmousetrap for more6 y$ B) Y0 R0 g/ V
// complicated schedules.
7 [7 Z2 Z9 g- J* w. ^ 6 O% r. H, J2 G2 V& I! |9 w
modelSchedule = new ScheduleImpl (getZone (), 1);
' a+ I) E4 _; S& e1 D9 w1 } modelSchedule.at$createAction (0, modelActions);& t, D8 ^3 S& o7 p: D" h2 g( }
; g% {! |# b0 @
return this;
9 ]5 \. q; N2 d6 C } |