HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( S0 x3 G0 B' V5 a- D' S! [( C2 B
6 f7 `; r6 L0 r/ m# _/ s8 _2 o public Object buildActions () {" f/ N" b4 v! L( E+ U
super.buildActions();
S* a+ @9 o8 W- ?" _6 E
1 V$ V3 g7 Q X7 F6 j V! K" n // Create the list of simulation actions. We put these in+ I X5 Q- g" ^/ o, z J7 L
// an action group, because we want these actions to be
2 N) R& s% m: j. C& W4 d0 a0 U. O // executed in a specific order, but these steps should* m7 A6 D" d) k% H* m% c
// take no (simulated) time. The M(foo) means "The message
8 d1 l5 p- _' z8 ^* W // called <foo>". You can send a message To a particular- `( D7 F" }; Q! O) `8 i
// object, or ForEach object in a collection.
% D k; G9 _5 L' D$ u u, c9 X. \' s
// Note we update the heatspace in two phases: first run
; M3 i7 ~! `0 |0 V m // diffusion, then run "updateWorld" to actually enact the2 ^8 u A- E, @8 ]! K: }# N5 e
// changes the heatbugs have made. The ordering here is& Y7 E- v5 J: i' d* K
// significant!
* R7 F% |3 }' o$ b
) G7 d0 M- W6 i( T9 G4 a @ // Note also, that with the additional" C9 O$ W4 j9 B$ O, A. \
// `randomizeHeatbugUpdateOrder' Boolean flag we can
) a: g6 {( G5 F( }% K' J [ // randomize the order in which the bugs actually run# @9 y6 G! U* F% c( Y' j9 `
// their step rule. This has the effect of removing any6 s3 X5 d/ d4 }+ J- W6 Z4 P6 Y! e
// systematic bias in the iteration throught the heatbug
, v2 O+ o$ c! f" v% P // list from timestep to timestep
, } y, W8 n6 O * s- W2 B% i- v) _
// By default, all `createActionForEach' modelActions have$ }% c7 {3 V, O
// a default order of `Sequential', which means that the2 P! e) @; V$ Q5 q. J1 J
// order of iteration through the `heatbugList' will be: a- w1 r; k5 L
// identical (assuming the list order is not changed$ x4 b( @- Y% J7 l5 _
// indirectly by some other process).! E$ e2 w3 y* ^6 c$ f! r! i
9 t3 Y5 M. l: L* h/ n modelActions = new ActionGroupImpl (getZone ());
# z& B; j- X: Z; ~' U+ i8 y8 ?" ~7 v1 b1 j
try {
/ h; T* f8 J- V modelActions.createActionTo$message8 F1 P0 X+ x9 ^' U4 c& v
(heat, new Selector (heat.getClass (), "stepRule", false));
; P: i0 t% A% A- d" c } catch (Exception e) {
( T: {& Q4 [: ]6 M: T5 j) \+ u" {7 F System.err.println ("Exception stepRule: " + e.getMessage ());
' }# G3 X2 y6 m) e9 n7 Q }
) d# o7 ? s# B6 h, h3 I) g4 B% h$ T9 M7 x S( ?% w9 J9 E
try {
' m! S- c+ i9 X" W" s Heatbug proto = (Heatbug) heatbugList.get (0);
/ N! Y1 n' O5 k: B6 `0 s Selector sel = % w3 y8 ~/ R) N3 B' L
new Selector (proto.getClass (), "heatbugStep", false);5 L. X, l4 G: N) p
actionForEach =4 j* L! _0 o3 P* i- l; i7 @4 }
modelActions.createFActionForEachHomogeneous$call
: h2 x) ^! e3 r t# S. _4 Y5 x (heatbugList,
. i* H0 t! H6 G1 f9 _0 Z* ~2 o new FCallImpl (this, proto, sel,0 A; O' Q6 s. }2 X
new FArgumentsImpl (this, sel)));2 v: l2 G- v8 [5 d' [- A
} catch (Exception e) {
! M w6 N8 a5 }" u* B0 D5 u+ p( } e.printStackTrace (System.err);, M: {3 a+ b1 {. `6 W$ _! X
}8 o; H' u( `7 t% K/ U6 U
+ t- g4 B! p( L) P8 g0 `! E syncUpdateOrder ();9 v" c! t! g* F# w6 V/ J" B, y
* Q- ^4 B h$ K# [' l4 s
try {
" E; L( ]' J! ~8 \( P z$ K modelActions.createActionTo$message ( E4 N& X5 [7 m3 ~9 ?
(heat, new Selector (heat.getClass (), "updateLattice", false));
* e9 l' |3 u+ z X# \1 K u } catch (Exception e) {( ?8 g% A1 ~, f
System.err.println("Exception updateLattice: " + e.getMessage ());% e4 r1 W3 g# D+ k2 h* T
}
' E) Y) c5 ~$ t " f' v% \4 T3 W( _; y. G2 Y6 b
// Then we create a schedule that executes the K# |0 ]( P9 l9 q8 ]5 e- S9 {
// modelActions. modelActions is an ActionGroup, by itself it
( {+ d u4 F r" q* I) m // has no notion of time. In order to have it executed in
; H4 u8 J9 k& }' V6 B/ t // time, we create a Schedule that says to use the) h% k4 F& {6 k. v" W9 H6 s! o
// modelActions ActionGroup at particular times. This
/ ?9 ?, |! ~" k! D( v4 A( w. Z& g // schedule has a repeat interval of 1, it will loop every7 G6 s5 I' b; y) K2 L/ v
// time step. The action is executed at time 0 relative to5 L: n# G8 h g5 S. J [
// the beginning of the loop.
- C9 ]- G: O, k5 B" a A' x% y2 D2 ~0 g$ c
// This is a simple schedule, with only one action that is7 }; [2 X4 Y; p) A9 y
// just repeated every time. See jmousetrap for more7 C& |/ p' {* f
// complicated schedules.
6 v6 N! k8 [# s% q# b1 Q: U x2 M
6 R. u! j. C2 S4 C$ J modelSchedule = new ScheduleImpl (getZone (), 1); A: D# N0 N' H% F. i r0 L
modelSchedule.at$createAction (0, modelActions);4 Y' E! A& a6 O! X, b! N% }
5 a- h" a+ V: m' _) q, m- }7 {
return this;
$ u; ~. z" ~/ A2 E: v0 E; c3 p } |