HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% A4 [$ U& Q" G
5 ?' s g% F# \/ b9 x
public Object buildActions () {% Q4 c7 P3 L, l0 o6 z1 k0 |
super.buildActions();
" ~2 u/ @1 B4 ?% J
) ~6 Y! o/ i9 a$ w' d+ @" Q // Create the list of simulation actions. We put these in
! ?5 Y( k9 v2 m // an action group, because we want these actions to be2 p: ?: E7 k% V8 k: Q$ _( i
// executed in a specific order, but these steps should' z5 g4 ~* `5 z7 u6 R4 u0 `
// take no (simulated) time. The M(foo) means "The message) k i4 d( d) r4 O
// called <foo>". You can send a message To a particular
; Q; ]8 h6 K( n% D // object, or ForEach object in a collection.3 {- ^! Z. c4 c% ~
( K y$ V, E' P // Note we update the heatspace in two phases: first run
4 b, D. a% |$ O$ _) k; F // diffusion, then run "updateWorld" to actually enact the( x, [% p( j) u |7 _- A8 Z
// changes the heatbugs have made. The ordering here is
! I% H0 O. T2 u: p, @8 y // significant!6 D! V; S- Q) ?. m; w& u- B, a
* r! P, }, {: C" g1 `: G m V' r
// Note also, that with the additional
- k$ e6 {' O% R" z // `randomizeHeatbugUpdateOrder' Boolean flag we can
" F2 x: |" A. a n$ ]8 k // randomize the order in which the bugs actually run
! A; @* ~5 f- h w // their step rule. This has the effect of removing any
0 x( z6 P; {! w6 E // systematic bias in the iteration throught the heatbug
0 s o1 h. c+ Q# t: [* }7 Z // list from timestep to timestep
( `/ \3 z' C! r4 d' j6 b; {6 y 7 `- c" I' i1 i0 ~) f( R( l+ s
// By default, all `createActionForEach' modelActions have
' M7 N& @ \" Y8 T // a default order of `Sequential', which means that the3 c: {5 v5 {, l$ B, T2 {
// order of iteration through the `heatbugList' will be
# |9 J; I! y& c# W // identical (assuming the list order is not changed
/ q% a3 ~3 {% q: [5 w* ~5 B // indirectly by some other process).
% }2 \6 p% p9 _$ D! p8 j6 Z : ^7 C- @ e) x- G
modelActions = new ActionGroupImpl (getZone ());2 M: V9 a7 @" o, e3 o/ _* v
7 P9 ^& s$ _2 k
try {
- G2 b- H) x2 ^9 k modelActions.createActionTo$message
0 J0 W" H. W; z; `' s; } (heat, new Selector (heat.getClass (), "stepRule", false));) ]; {2 ]+ D d& | J: u: r; P
} catch (Exception e) {/ i( J. ]1 R# r" M. C
System.err.println ("Exception stepRule: " + e.getMessage ());( o" [- w3 V3 ^5 x- a
}6 y) i! B: w( m ^& q8 [
+ f7 j0 g/ A# I
try {
' p( X5 L8 v( {' b Heatbug proto = (Heatbug) heatbugList.get (0);. S9 d- s* ~1 P; i
Selector sel = ) Z$ u- @- u# s+ \# F* |
new Selector (proto.getClass (), "heatbugStep", false);
( e |# Q: L% { actionForEach =% @* q3 z: d6 r' u3 p$ ^
modelActions.createFActionForEachHomogeneous$call ^0 M ^- I8 O+ }! j
(heatbugList," _/ D( ^ E. n2 w3 x
new FCallImpl (this, proto, sel,
) H9 i2 P* L( S; i new FArgumentsImpl (this, sel)));7 N- E' A7 y" C* T4 \
} catch (Exception e) {3 v) y$ w# v3 f% P: [7 D4 S E0 j
e.printStackTrace (System.err);" @& ?# g% n2 v% b! x5 W' s! G, }
}
# A b) Y# B- ^3 L. ?& I . N: l4 V: A0 d5 \. e3 q0 v
syncUpdateOrder ();
% R, d) k) _+ A9 m
3 Y$ x5 T5 ^; p( G try {
0 B" j" N+ x4 J8 c modelActions.createActionTo$message
5 [6 Y8 k6 `- i% A: y2 c (heat, new Selector (heat.getClass (), "updateLattice", false));# K3 I, J: D$ [+ e
} catch (Exception e) {
" Y7 R% l, i6 |, B$ b1 w System.err.println("Exception updateLattice: " + e.getMessage ());
1 L* @' O- G, x. N }
5 y$ [7 K; x" |2 M' A9 s# b6 I 0 `0 z# e: `& e/ L
// Then we create a schedule that executes the
; o* D) L- ? b+ M // modelActions. modelActions is an ActionGroup, by itself it
- @: y+ q @# W9 D // has no notion of time. In order to have it executed in
! t; X6 z! }) H) b9 n) ?. N: C // time, we create a Schedule that says to use the, ~; V1 l; b/ d3 N- V6 W% `
// modelActions ActionGroup at particular times. This; V6 G- { p( e3 l& ?
// schedule has a repeat interval of 1, it will loop every
8 S4 p5 x% R& k, o // time step. The action is executed at time 0 relative to
S4 i& S3 ~) Q, R" l // the beginning of the loop.& V3 F; M2 g: n- {" P5 V
: W' Z6 Y% Z- i* L* S4 A // This is a simple schedule, with only one action that is& l/ x- i! k4 v$ S8 d5 A
// just repeated every time. See jmousetrap for more
o8 A# a4 [9 t // complicated schedules. |( p; b; v' E/ e# f
; j0 i" Q* t7 ^' M
modelSchedule = new ScheduleImpl (getZone (), 1);
0 Y/ h8 Y3 t3 C0 J, X8 A modelSchedule.at$createAction (0, modelActions); K9 M: `# h% s6 m1 w: v+ U
5 k1 k/ c* ^6 n4 }" P return this; x) [ G8 _1 J8 k
} |