HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% }! e( c a. D" A$ |
% J' H& `$ J! g: }9 _ public Object buildActions () {3 v# T* ?# \' M- B
super.buildActions();$ S. v/ L# Y* X
! S8 |# f0 Q! q! q) y
// Create the list of simulation actions. We put these in
* N1 a( a& H: W; n ?4 \, C3 s // an action group, because we want these actions to be# N% w, C! c( t3 w& T) Z
// executed in a specific order, but these steps should
3 i/ A- [ X5 Q // take no (simulated) time. The M(foo) means "The message6 N e& x {* o7 y+ q7 D
// called <foo>". You can send a message To a particular& M& Q) m: q( R* |" a, l
// object, or ForEach object in a collection.
3 l% Z% ]$ I# F
' k) w2 N; f2 ~$ b! `, X# o% U8 v // Note we update the heatspace in two phases: first run F& b- L, h$ v- D4 h' l' Y g
// diffusion, then run "updateWorld" to actually enact the o2 G6 k+ l4 z
// changes the heatbugs have made. The ordering here is
2 d8 x$ J) q: ~: |0 I // significant!" }1 L. x8 p# b
1 p5 ]( m" X `: J0 |$ v
// Note also, that with the additional$ W5 X) b. A2 }/ } T
// `randomizeHeatbugUpdateOrder' Boolean flag we can- v3 K) Z9 @% K2 u% M$ E3 @
// randomize the order in which the bugs actually run
1 _3 a6 \& Z- ^& y& B* D // their step rule. This has the effect of removing any
6 l5 b# m" r. u/ G/ r // systematic bias in the iteration throught the heatbug3 X: ?, N1 a3 ?: Q3 X
// list from timestep to timestep
$ j! ]. m, U- Q+ y
2 g4 x8 t1 W/ o+ k6 { // By default, all `createActionForEach' modelActions have- m8 ?4 w# m: y
// a default order of `Sequential', which means that the# G4 r& P) B4 Q5 B
// order of iteration through the `heatbugList' will be+ v& d, o7 M- E, {; s+ }( @
// identical (assuming the list order is not changed. }2 P5 @3 @) D( G% c( C# T% J" O
// indirectly by some other process).
9 w/ z/ T% W2 R# l' y 8 ^. Q/ u+ Q4 p
modelActions = new ActionGroupImpl (getZone ());
# l0 \, Y' U& K) F* g6 X N( f7 G- R5 [$ I) W3 `2 l
try {
( T1 m, S" n. p; a! j modelActions.createActionTo$message
/ w/ E1 |1 _! |+ ^/ F7 e (heat, new Selector (heat.getClass (), "stepRule", false));# ?" h8 R: w/ E7 V8 v, F
} catch (Exception e) {
5 T# D% {$ i0 q6 S+ R5 A. v" _ System.err.println ("Exception stepRule: " + e.getMessage ());
/ K$ m* d: _: i! L6 ] }
+ d! x) @* o$ `' Q9 [7 ~4 p! s
! H A8 S& n! Y try {
' U G* H6 V: o8 t4 y8 [ Heatbug proto = (Heatbug) heatbugList.get (0);
3 @# N/ E& b2 g& U# ^4 u Y Selector sel =
/ A" b, B3 ?- ]) f7 T9 H new Selector (proto.getClass (), "heatbugStep", false);0 n. x5 o6 |& y0 G' t
actionForEach =: \" X8 d9 F& t: ]% _
modelActions.createFActionForEachHomogeneous$call
8 U) h4 F5 d! E' K/ Z b/ V0 l' b (heatbugList,* @0 _* E! U5 C) J7 f4 s6 y# @
new FCallImpl (this, proto, sel,5 _) z) \% f X9 u" \
new FArgumentsImpl (this, sel)));7 M0 a0 _6 R5 j7 M5 P$ ^' n
} catch (Exception e) {4 a0 g6 S Z+ s7 a' e6 g: J
e.printStackTrace (System.err); S- B, H2 c: I
}
- b4 S% r) [: k9 @* { I % G. k# f$ m/ Q" l- v8 C# ]2 v
syncUpdateOrder ();
4 I1 [2 }' v- [- _0 \6 k* ^ c9 x9 l2 D! Q5 @
try {. P: E: h( q) l- N2 c$ h
modelActions.createActionTo$message 2 v: M. W; H& {9 I, ^ P2 Q8 T: u+ p7 n
(heat, new Selector (heat.getClass (), "updateLattice", false)); e+ y- y, B' s; {' W) H; }
} catch (Exception e) {
' L( s! ^# [1 s% B System.err.println("Exception updateLattice: " + e.getMessage ());
: T _9 _" `6 B. X9 h! f }
. C3 C: H8 U+ w2 x
& g7 e8 P- O( L // Then we create a schedule that executes the! h2 J I- ]9 f
// modelActions. modelActions is an ActionGroup, by itself it0 W+ n5 R2 G8 ], U7 J; B( E
// has no notion of time. In order to have it executed in9 y. S6 @8 n7 |7 s# X" \
// time, we create a Schedule that says to use the
$ [) u" _! x) K5 i& [' C& @ // modelActions ActionGroup at particular times. This
. h' k- {4 e, j8 f // schedule has a repeat interval of 1, it will loop every, I2 Q6 ~. L8 u! U+ J0 J) m
// time step. The action is executed at time 0 relative to5 M' E/ _; C" |, A! u1 M1 R) n
// the beginning of the loop.9 B1 M: u/ T$ g
7 s8 i9 J; i& I6 t) n3 w1 E; ` // This is a simple schedule, with only one action that is! p1 r, I5 u0 ~2 l
// just repeated every time. See jmousetrap for more
5 H i* O* L1 z- L( Z // complicated schedules.& L1 @" j8 L: I7 Z5 _" B8 D: e1 e
' G9 ~6 v; E6 V4 u
modelSchedule = new ScheduleImpl (getZone (), 1);
! R$ m/ N. L5 L- b, ]9 Z# ~ modelSchedule.at$createAction (0, modelActions);) k' S; V; b: o @! C
1 f/ z/ ] k& D0 m J
return this;& X- c6 k+ ^2 x
} |