HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: k4 @4 Z! [! _% D3 ?. k2 j( K: d
( C S# d! n5 w. B/ h6 } public Object buildActions () {, p1 T$ x$ P! r: C% g" W$ W( }1 p b+ N
super.buildActions();
P/ |6 m+ q' k+ J * b0 j9 y& S: Y' L3 g9 F. k0 q6 e
// Create the list of simulation actions. We put these in
3 e0 L5 J% v: }6 y; y7 y9 a$ } // an action group, because we want these actions to be3 {; D# w/ }# g" l Y1 L
// executed in a specific order, but these steps should
, ^) u/ z* e# | // take no (simulated) time. The M(foo) means "The message/ z& }7 |' V% ]# v
// called <foo>". You can send a message To a particular/ L# h" X, a% E: m
// object, or ForEach object in a collection.
. }3 G M% Q! A- Y9 g
' {& H. q% t9 p4 d // Note we update the heatspace in two phases: first run9 L' y! k. S' i2 u2 s
// diffusion, then run "updateWorld" to actually enact the
9 a- b+ P* d/ o$ _: q // changes the heatbugs have made. The ordering here is
3 k2 Q+ i4 ]$ ? // significant!
9 [. C) F+ Z; f, w/ v5 C) K, W0 k
4 ~3 K8 s: {' B) b) y // Note also, that with the additional% J, n- {1 e# H. J+ D5 G9 j q9 x
// `randomizeHeatbugUpdateOrder' Boolean flag we can
+ a v7 A X! s2 V // randomize the order in which the bugs actually run- H: {* _: d! G
// their step rule. This has the effect of removing any
8 y- t# G7 v/ @3 b // systematic bias in the iteration throught the heatbug7 O; u7 ~5 S- v/ U M: c! g
// list from timestep to timestep
# a. b E* V9 ], r
4 Y3 H' ^# W x1 I% s // By default, all `createActionForEach' modelActions have
6 C% ~9 d5 `- \; j- f // a default order of `Sequential', which means that the
, ?- y- a" _0 b, J7 [- p) @% { // order of iteration through the `heatbugList' will be( ], M5 g4 o& u; ], k7 l
// identical (assuming the list order is not changed
% X: Z3 B, A: u // indirectly by some other process).
) p( y! V3 M) \ N* n 0 `6 ?' k7 l* w
modelActions = new ActionGroupImpl (getZone ());
- l: h* ^$ X/ `# S1 n
V! q6 \8 ?( P- G5 ~; \$ h try {+ O+ }* e& h- ~" o1 S! }$ \
modelActions.createActionTo$message1 I, Z# ?1 |8 U2 m% H- W3 n
(heat, new Selector (heat.getClass (), "stepRule", false)); i z: K& {9 }+ Z% g$ w
} catch (Exception e) {
- R/ i9 p; y1 g7 V: |" }, I; J6 @) q System.err.println ("Exception stepRule: " + e.getMessage ());
3 U8 p4 t9 {6 S, u7 ~3 c }9 c8 |7 X: F2 B) g
3 E0 n& R8 c o. A' D1 H
try {
1 H8 T' l( b; M Heatbug proto = (Heatbug) heatbugList.get (0);1 ^) `* x+ a. D' Q0 u+ x W3 B
Selector sel =
4 P, n' J; |* e1 Y new Selector (proto.getClass (), "heatbugStep", false);. H% @+ p/ E& G! T
actionForEach =. ^1 b c5 q6 I& X/ I. V
modelActions.createFActionForEachHomogeneous$call( Y/ r7 X6 u" J4 | q0 _) L: R* i9 w
(heatbugList,, p; ]% q+ Q" K# k
new FCallImpl (this, proto, sel,
/ h2 Y7 N2 r" m- ^ new FArgumentsImpl (this, sel)));, T$ u( n2 x) z8 ?
} catch (Exception e) {5 D' V$ j0 d. T3 |
e.printStackTrace (System.err);
$ j5 }7 L) s8 h3 q, s }
& R; [/ u/ b1 R; ~9 D% ^
* a* j3 I) ]& u4 m# T" X4 t4 Q syncUpdateOrder ();: G8 X' H" s6 O8 {: @3 T `
' Y {+ T- R" A+ V! M try {% J7 s% w5 j! u# i _2 O$ N7 x
modelActions.createActionTo$message
" I" D* \4 t3 \/ H! C6 p1 W. U (heat, new Selector (heat.getClass (), "updateLattice", false));# z7 f2 l, `1 _+ Q- Y
} catch (Exception e) {
1 D* K) j H) E: V System.err.println("Exception updateLattice: " + e.getMessage ());0 w2 c, s! a- l
}$ V$ f3 Y6 q4 {! e/ X
/ s$ e& t: I* b, k6 F, f& u
// Then we create a schedule that executes the$ \' O7 S4 I, [ \
// modelActions. modelActions is an ActionGroup, by itself it8 X" G4 k( Y1 H- v. _% I3 S
// has no notion of time. In order to have it executed in- U* c9 l& N: q* A% V; s4 T& A
// time, we create a Schedule that says to use the: r4 f2 ]: R0 O9 I2 p% K! x' G
// modelActions ActionGroup at particular times. This; q, N% w9 s0 a- X9 k2 P, D
// schedule has a repeat interval of 1, it will loop every
& B ~* `: K! H3 v& x5 G0 Y // time step. The action is executed at time 0 relative to0 o( f1 R( C7 D7 U4 w7 l9 m
// the beginning of the loop." g: a* m- a1 B8 ?$ X
$ Q( w( I9 k: F, U" P! X
// This is a simple schedule, with only one action that is+ F* o) C/ \% W; j
// just repeated every time. See jmousetrap for more$ Y- s j2 M5 i# G9 t: g4 }
// complicated schedules.7 v5 U" G5 ]8 f9 B b3 `
3 F( V7 j1 m/ k$ f modelSchedule = new ScheduleImpl (getZone (), 1);% X# B$ R0 F9 f
modelSchedule.at$createAction (0, modelActions);
* d" g8 D9 X7 o* w- S; ? 2 ]9 J3 l5 `" g
return this;0 ]4 B r/ G/ O, ~/ I/ ~4 ~: D
} |