HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) D# I$ M- P: i+ @; `
- z& W! }3 C! \+ r' c1 \/ S public Object buildActions () {7 t% d6 Q0 ~- T. t
super.buildActions();& H. |$ ]$ m& a: W; X; Q
- \: z( M. K/ l6 {! T( t4 p/ s( W( p
// Create the list of simulation actions. We put these in/ @& D; G6 a' ?$ O/ T( @# y
// an action group, because we want these actions to be9 Z2 H: i/ m4 u7 G
// executed in a specific order, but these steps should Z$ D* M' n3 ~# P. f8 k
// take no (simulated) time. The M(foo) means "The message# S. E& f) k e+ H6 z
// called <foo>". You can send a message To a particular1 d- X, B5 c6 k- _ \! @! n7 f
// object, or ForEach object in a collection.
8 `0 }% E* d: J9 x2 @- r% W 5 O$ ?5 ?6 B: |
// Note we update the heatspace in two phases: first run
, [0 }& F; U/ u" N5 n e& } // diffusion, then run "updateWorld" to actually enact the. E* F4 O/ o4 X8 y. J$ M- k, F
// changes the heatbugs have made. The ordering here is2 v! r3 x8 L7 L2 a
// significant!
- a0 G% G! t( ^
+ u; A, R3 g, ? // Note also, that with the additional
' S5 i$ C V. a$ c, k; B // `randomizeHeatbugUpdateOrder' Boolean flag we can
: u5 N: J: R3 x7 [+ f' @& F; a) V. W // randomize the order in which the bugs actually run) C4 V' j( ?$ P% B5 S1 o
// their step rule. This has the effect of removing any
# N1 b9 Q* I+ X% x // systematic bias in the iteration throught the heatbug
f/ n6 _7 q- e' C- b // list from timestep to timestep+ v0 o d5 Y$ S& V6 T
/ H- R; _0 m/ t/ q( U // By default, all `createActionForEach' modelActions have
1 [ N4 t' e" K! z* Q1 N // a default order of `Sequential', which means that the: z V1 v }' v! k" I( r+ |" d( E
// order of iteration through the `heatbugList' will be5 z& k7 \- ? ~8 M. s" l8 s0 k
// identical (assuming the list order is not changed
1 M1 y) i; I" C8 N3 N& A( `, |8 G // indirectly by some other process).
% N) D0 p o8 K5 a 5 r1 g/ z1 q, }8 n, s
modelActions = new ActionGroupImpl (getZone ());
2 L5 s' ~8 Q- @' j, J: S0 Q+ ?; H: o& K
try {8 q4 j' [1 Y$ @0 f! X7 Y6 q8 S0 s
modelActions.createActionTo$message
" [2 F# ]! B$ A (heat, new Selector (heat.getClass (), "stepRule", false));9 `' G2 R# e, Y
} catch (Exception e) {
% ~; M. q6 i# u% Q System.err.println ("Exception stepRule: " + e.getMessage ());
0 K: _" s+ [0 B5 f) } }
( h& ~# d" W- e" a
5 f% e% k1 D% |. l0 E4 X" \ try {
+ M4 H. n4 m3 v; ~1 x Heatbug proto = (Heatbug) heatbugList.get (0);+ Y+ ^! d7 b5 y F# y6 l. M6 K
Selector sel = ( p- X8 Z! _2 I( h6 w4 k( h
new Selector (proto.getClass (), "heatbugStep", false);6 K5 b x" Z! ] _. \- U8 V
actionForEach =; q3 H6 Q. t+ P4 b- G4 M7 ~
modelActions.createFActionForEachHomogeneous$call$ N7 G8 e: d4 C6 q
(heatbugList,
3 e* ?) ~. E4 i" m0 q* |) ~9 X new FCallImpl (this, proto, sel,
% y# q5 Q$ `/ F3 a* C new FArgumentsImpl (this, sel)));
. ~8 r) j$ q9 N3 I9 ~$ G2 C } catch (Exception e) {
$ [' G9 M* u2 Z' g' Z e.printStackTrace (System.err);
7 e2 f8 m' i5 }, r }% l8 I2 ^3 f. n2 B
! U4 t) {" w7 [9 r: s8 l: m+ c syncUpdateOrder ();
: y. Q3 ?+ l' P! T' @) ?5 f! ~8 ]
try {, l1 c& I. {- V+ p2 Y1 ]3 ^
modelActions.createActionTo$message
0 k( ^ g" o0 g; ]0 b# a V (heat, new Selector (heat.getClass (), "updateLattice", false));. {: E, y9 d; a7 w3 P
} catch (Exception e) {
5 @) v# V6 { W" o0 }5 q System.err.println("Exception updateLattice: " + e.getMessage ());
. M; K# R8 t# t5 t# F& n8 m8 p }
9 h4 r4 y3 b+ S* }6 K
9 t# T r# {+ g( y7 g // Then we create a schedule that executes the7 ?/ c% g6 x& S3 [2 Q6 k
// modelActions. modelActions is an ActionGroup, by itself it
* B' `* G' [* u# W, S | // has no notion of time. In order to have it executed in$ T8 b( K8 c9 S( i
// time, we create a Schedule that says to use the2 p" m( r9 o1 P0 D9 t$ J
// modelActions ActionGroup at particular times. This
, m0 `/ _- v- z. u) k0 ^: ^* H* C, G // schedule has a repeat interval of 1, it will loop every1 _8 }" a1 j$ C, b& g$ C6 P0 j
// time step. The action is executed at time 0 relative to, X. D& I K5 Q$ h! w9 l: W
// the beginning of the loop.: L7 A) Q! s& H! f1 q1 O* e6 n/ {
4 m6 A' R0 V: n" R // This is a simple schedule, with only one action that is2 m! E7 e2 B0 m% o8 J* J! U
// just repeated every time. See jmousetrap for more
$ G9 ~7 g3 `6 o4 Z8 H( L // complicated schedules.
; }1 T. U- s) _. D . Z$ q8 \' ?. ]6 c, B7 R
modelSchedule = new ScheduleImpl (getZone (), 1);
: ~( T/ D0 F/ g modelSchedule.at$createAction (0, modelActions);" {7 G2 r8 m) A1 l+ X
6 U! c: R f/ k) F2 t return this;
^3 ?; m% r' y0 }: b3 u } |