HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ B% T4 }# m. ^3 t& I( F, q: B
1 C4 }8 q/ F, g/ L. d3 X- q4 \/ p
public Object buildActions () {
9 R/ u4 `( a3 ?3 a9 C7 H super.buildActions();$ |" j- ]; P, ]
! Q5 ?- j: D- f$ |' w5 B5 t* y // Create the list of simulation actions. We put these in
* ~7 Z, T3 Z; d) X2 {, s$ Q) t2 q // an action group, because we want these actions to be2 U- A) ?& l: U
// executed in a specific order, but these steps should* p4 r' m: z( r* A4 d3 W4 X3 o
// take no (simulated) time. The M(foo) means "The message/ d8 p$ H3 \& i
// called <foo>". You can send a message To a particular
, x; p; @' u, _* u: p& A // object, or ForEach object in a collection.
, E7 u$ a& O/ D9 c/ ?! `& p 7 y5 E( H* G# g
// Note we update the heatspace in two phases: first run
; r! B2 [0 Q2 M" E( n // diffusion, then run "updateWorld" to actually enact the& e' S1 P$ a+ G& t& s
// changes the heatbugs have made. The ordering here is
( E# x5 q8 B: W1 M8 h3 J. A- g // significant!
) h. V- c# w( U
. D* U$ {3 ?" S, O+ i3 ` // Note also, that with the additional
P3 s3 ]* J7 g6 {2 Y) X // `randomizeHeatbugUpdateOrder' Boolean flag we can9 Z" b% o- Q, L9 X) o! @# z: v
// randomize the order in which the bugs actually run% d9 A& [# D9 u+ W) s3 ^
// their step rule. This has the effect of removing any& ^/ t& F7 r. L# K
// systematic bias in the iteration throught the heatbug. X3 |- F, q8 g8 a( Q& _* t& v
// list from timestep to timestep
$ _) w/ N/ q; e: [& z
( d* X r' V9 J% K: q% y3 X // By default, all `createActionForEach' modelActions have
3 n9 G5 H! Z- ?& X // a default order of `Sequential', which means that the. }. u0 v, w6 T2 G* ]8 q9 E. m: d) ^
// order of iteration through the `heatbugList' will be
0 m0 f, R% h0 h+ j# l. I // identical (assuming the list order is not changed
8 g y2 Y1 u3 m* S) q- ~ // indirectly by some other process).
. X4 \( P) ]- w2 e5 A 8 w, d7 Z) l1 R3 p% m w2 S w
modelActions = new ActionGroupImpl (getZone ());! K; c; m2 Q& {) A$ d. h8 v) V3 Z7 K
5 i' Q; C z. \0 d9 a7 y1 I! g try {! R3 }% D0 D; g. R
modelActions.createActionTo$message
' k: D% P" P" A (heat, new Selector (heat.getClass (), "stepRule", false));+ o+ \7 G& Z- y* @2 Z5 p
} catch (Exception e) {
. ]9 w/ ~# Z6 A' ?1 X* N7 x2 U- ] System.err.println ("Exception stepRule: " + e.getMessage ());& X- A7 s4 n0 q! H T; c
}
! g T% x, q* i% ^' B6 {& q6 m; ~& T; y/ d1 M: \, i1 A- i; Z
try {: `3 ?1 H4 x* Q4 s( N! \% l" n5 K
Heatbug proto = (Heatbug) heatbugList.get (0);! w3 b& j& W" l7 l/ P
Selector sel =
. y9 t5 \7 y1 S3 A2 M8 R new Selector (proto.getClass (), "heatbugStep", false);7 [5 C9 z9 m( j2 w1 _1 q
actionForEach =
7 p2 y7 g. x7 @3 @6 d4 g modelActions.createFActionForEachHomogeneous$call
) n% z; _& e& E4 F; R% Z1 y1 F$ I (heatbugList,+ S, ^. }* N# f
new FCallImpl (this, proto, sel,9 U4 l8 `! X: j; a- o7 @% V, O
new FArgumentsImpl (this, sel)));
9 |- c' e8 F; K } catch (Exception e) {, c/ f! J% _- W! A f; k2 v
e.printStackTrace (System.err);$ h4 Z! u* D8 q0 S6 W+ J7 q/ G
}
3 H0 Z- N m7 A, v5 Z ' P. |2 m/ D$ q9 }, x
syncUpdateOrder ();9 T+ V" V& g+ b1 n6 k. {2 w
( Z/ ~% o' ]7 v! Q try {% j y {& v3 S3 B
modelActions.createActionTo$message
5 Q0 I. Y+ s8 [" d$ K5 w (heat, new Selector (heat.getClass (), "updateLattice", false)); J; [1 X& X5 T2 ?0 N* _! w" y
} catch (Exception e) { A* M2 U, q! U, c& t
System.err.println("Exception updateLattice: " + e.getMessage ());& b, i4 V" U; ~2 g i
}9 I; D K1 b- G0 q3 J
' i" j6 ?5 ~& v" b* a5 r$ V& L // Then we create a schedule that executes the* M- q; |! R; V) _% g5 F
// modelActions. modelActions is an ActionGroup, by itself it: a- J( D6 n2 t0 f- X. t t. T
// has no notion of time. In order to have it executed in
* b" _2 y, L, d- ^ // time, we create a Schedule that says to use the
- a% ^6 w, I! ?4 j: ~1 R // modelActions ActionGroup at particular times. This
# x' G. V7 J K. u // schedule has a repeat interval of 1, it will loop every
2 ]- h$ ?. a J4 ?" i7 A) Y! |0 D // time step. The action is executed at time 0 relative to
! K j' M# E9 \ | // the beginning of the loop.( `- \! X( Z6 X4 G
3 V" q& o5 a# R1 p
// This is a simple schedule, with only one action that is
2 L; Y( H3 m j2 R2 s/ ~9 g: B // just repeated every time. See jmousetrap for more
) E; k- k4 b) ^ // complicated schedules.
0 c. |/ }+ _; @1 b5 q) f. l" [2 y9 G; i: q % D3 x, I* \7 o. `, p
modelSchedule = new ScheduleImpl (getZone (), 1);2 F; `$ I: k7 G& ]
modelSchedule.at$createAction (0, modelActions);
! n+ O" w, S w* p0 w1 ^& _6 N% `9 |
- I0 w( S1 O5 Z S( Q4 \# }8 \9 T return this;( t! d+ \# {1 V E ~6 ^8 L
} |