HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 U$ C, e' |" g, |- B& m7 Q
( ^, f, R! p) R) v3 k
public Object buildActions () {* g5 J$ n' k1 `
super.buildActions();
3 Z# Z3 E. i! x( w5 I 0 r: h; D* x# t
// Create the list of simulation actions. We put these in
; f- i6 W6 r% w6 N' M! d // an action group, because we want these actions to be
8 F0 q- w: Y0 l6 P // executed in a specific order, but these steps should |2 I$ y( U. b* s* v0 D
// take no (simulated) time. The M(foo) means "The message' @, K) q% X5 Y
// called <foo>". You can send a message To a particular! Y) I- Q1 K p
// object, or ForEach object in a collection.
( Z/ |& S. m0 b+ L/ ?, h, N9 }
- w+ `8 u* s9 F* h5 M' \ // Note we update the heatspace in two phases: first run
' A) C0 d* m+ A o // diffusion, then run "updateWorld" to actually enact the
( q0 p ]7 ]1 X3 ?% o // changes the heatbugs have made. The ordering here is2 ^! p$ k- E" h, g! j& M
// significant!
' F& Y# G* O8 `" X ' N2 U8 \- q, O% ~( l5 `
// Note also, that with the additional5 l# j! V' ]5 T5 R1 l, p, h
// `randomizeHeatbugUpdateOrder' Boolean flag we can7 \3 V' H _& E5 y9 i' M P
// randomize the order in which the bugs actually run! a2 F$ }- V5 m5 b$ d% q0 l
// their step rule. This has the effect of removing any
) L& N( S6 x' f& v: w+ [ // systematic bias in the iteration throught the heatbug
- ]! J6 M. Y9 T+ A+ w( a // list from timestep to timestep
% ^9 |* `; E5 Z$ Y
1 O1 ~: ]! |( [! `1 L4 D // By default, all `createActionForEach' modelActions have5 s7 j0 `/ t) [+ K9 p* y
// a default order of `Sequential', which means that the
6 p, D8 b9 E& W% |4 c5 }% T4 ? // order of iteration through the `heatbugList' will be
0 v# h/ O$ k1 Q! V // identical (assuming the list order is not changed! i/ i' P9 K& e% j* K) F
// indirectly by some other process)./ Y% j& w* g( c+ C. W+ c# F
( X/ g: [; v+ {$ W modelActions = new ActionGroupImpl (getZone ());
! ]& b! Q$ _6 ]- q2 }# J' q4 Q5 Q, h w: ~) g
try {
( X( B. I1 k G ]' W4 n modelActions.createActionTo$message: ?! D: K9 C M9 v9 n+ ]. P$ i( F/ `+ R
(heat, new Selector (heat.getClass (), "stepRule", false));
! P' n& ~, a: Y" \ } catch (Exception e) {/ e; L( J& K' {: A/ {* z
System.err.println ("Exception stepRule: " + e.getMessage ());
; X5 }9 v3 W" r! a }
/ S7 n; _# m6 u, F1 z6 Y* X+ ]3 A0 D7 s& t% l$ m" P3 X4 H
try {, Y9 U n3 z6 |
Heatbug proto = (Heatbug) heatbugList.get (0);
) {! P& o2 D2 ^ Selector sel = . c" j& K# r5 o2 t- t
new Selector (proto.getClass (), "heatbugStep", false);1 v8 z" k) ~1 n& Q# _+ Y& C9 C
actionForEach =" F9 z, |& O" G, B
modelActions.createFActionForEachHomogeneous$call2 f/ l/ x& q: j3 T% s
(heatbugList,
9 Y' G, m+ s2 T8 V, g5 W* V new FCallImpl (this, proto, sel,
2 P8 c6 W8 G3 J- F9 a/ } new FArgumentsImpl (this, sel)));6 }5 r% ?1 `' S% i3 V% H2 D
} catch (Exception e) {
; g0 S/ l/ \" r4 o: F, V- V e.printStackTrace (System.err);
2 n+ I. @# K9 c+ @9 s }( Y6 L. L( M k# k
, Q) P5 V8 |6 ^5 C syncUpdateOrder ();
$ \& l' i- T% y3 F# }( l1 m0 M: l4 P8 J3 m
try {9 l; z1 }* X1 Y' c9 P/ U
modelActions.createActionTo$message
6 s, t7 V/ K3 B (heat, new Selector (heat.getClass (), "updateLattice", false));
; h& x% z- O& g9 G; |7 @ } catch (Exception e) {8 W; B p$ b. y! w# ?$ ~, v0 G% h5 u( Q; {3 |
System.err.println("Exception updateLattice: " + e.getMessage ());
; Y O: w- Q% N: f/ b }
O* M: M. K/ [) `: F. G
6 @) L: U4 V& Y. u. q; @2 ~: V0 E // Then we create a schedule that executes the
4 M% C2 S+ e/ p% P! M // modelActions. modelActions is an ActionGroup, by itself it. ]$ h$ ~# Y- w/ \; E
// has no notion of time. In order to have it executed in
. X! V, | c& W: I) s( k& V; t // time, we create a Schedule that says to use the: P& i' K, O8 @+ u' i
// modelActions ActionGroup at particular times. This! a; @; d5 r+ h, ?, E
// schedule has a repeat interval of 1, it will loop every
( {# R1 [4 T: Z+ q // time step. The action is executed at time 0 relative to
$ V' ~" a, }* ]6 j" p& I // the beginning of the loop.
9 }8 C. b/ w) J# |; R0 @# x4 _6 B, t l! C3 B4 m
// This is a simple schedule, with only one action that is
' i% j2 z) e2 K) y1 W: J9 ` // just repeated every time. See jmousetrap for more; y6 a8 _& y1 D( [
// complicated schedules.
' Y! t" W6 D5 Q: @. p 1 w9 H$ w6 @) M R4 L
modelSchedule = new ScheduleImpl (getZone (), 1);
6 Z/ Y k" P, N3 x' Y, d modelSchedule.at$createAction (0, modelActions);
4 s$ U, ]. N- H( x+ m 7 n6 }, r M7 X' A+ t: p
return this;
0 c* E, G9 b& R& }% e. W } |