HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 S4 v/ l- I0 j' q9 |3 L2 U8 y% C$ ^+ ?; }2 m! ` z
public Object buildActions () {
5 L0 y% X: Y" w ^1 y super.buildActions(); g2 g: B4 o2 v M
- A+ ^* x% F. o! _' {# R // Create the list of simulation actions. We put these in
. M# m$ y ]# k& q- E // an action group, because we want these actions to be
5 F% A0 v! l: a' l8 D4 f# K% p // executed in a specific order, but these steps should" t4 S" p# g( Q* e9 Y
// take no (simulated) time. The M(foo) means "The message6 l! |7 K$ G/ B6 C4 p2 B- S5 Y) n+ L
// called <foo>". You can send a message To a particular
* O ]" Z, S; O" Q, O; K" V // object, or ForEach object in a collection.) E2 X9 @' R. O: H3 J( t+ {7 Q/ L
% i$ D2 p+ ?' O7 ]4 ~8 h
// Note we update the heatspace in two phases: first run
0 X6 y& {- G; y3 c // diffusion, then run "updateWorld" to actually enact the8 T3 K8 {: X9 a7 |! b5 b, ^
// changes the heatbugs have made. The ordering here is
4 D' Y8 E* S9 l$ d! v // significant!6 o% G, Z% I: {( `
) B3 O0 l' z Y2 L* U
// Note also, that with the additional
" f8 J# K* _/ ? i/ |) d& c( e // `randomizeHeatbugUpdateOrder' Boolean flag we can- \2 ^* G1 `! F$ {
// randomize the order in which the bugs actually run; o- o1 `2 m6 o1 D
// their step rule. This has the effect of removing any+ a6 M) s& s) y- }
// systematic bias in the iteration throught the heatbug9 z# s, K! V( [; G0 y. ]
// list from timestep to timestep
4 B5 }4 ^2 s7 z ( b$ _8 m4 ]. O+ T( J& W
// By default, all `createActionForEach' modelActions have' [: C6 @. f1 m, I/ E6 f
// a default order of `Sequential', which means that the
9 [2 W$ u' }. q2 h; h4 Q& r // order of iteration through the `heatbugList' will be
z% \; I9 F" p+ F/ g5 Y // identical (assuming the list order is not changed2 [9 U4 ~' C+ {4 O7 ~+ m
// indirectly by some other process).
. b+ P0 f; ]. B2 l
' Z2 D. o$ e# S; w modelActions = new ActionGroupImpl (getZone ());
3 C% K& M3 n; r# a: p |- y
* u4 |+ d2 _- [0 W3 o try {. z- Z% p) s& ]0 g) M/ s
modelActions.createActionTo$message9 r0 G! _* g6 K) V+ [2 H4 q
(heat, new Selector (heat.getClass (), "stepRule", false));
- ~* A. Q6 |" S# @4 k( Q } catch (Exception e) {) f: U9 P. J' P7 V: e
System.err.println ("Exception stepRule: " + e.getMessage ());4 h1 q" k4 X9 K y, l, }9 b
}2 @* j, R" u7 T' c5 f4 `
, n, p5 P* U c* t5 E. x9 w
try {3 _1 ~4 D; K; V1 G+ C8 b% E
Heatbug proto = (Heatbug) heatbugList.get (0);
+ Y$ r4 S# i2 |# S Selector sel = 6 s9 L" H: E. B- p" t4 ?( A5 `
new Selector (proto.getClass (), "heatbugStep", false);5 A, ^0 j5 @( l% q- N1 h4 ~ t
actionForEach =* U1 q8 e' F6 z' @
modelActions.createFActionForEachHomogeneous$call, ^) ^: B9 o0 E6 t4 ~7 X
(heatbugList,1 d" l* g, x( ?& |, y6 I# U- Q
new FCallImpl (this, proto, sel,
& S, o2 a+ G' q) z* C" J new FArgumentsImpl (this, sel)));
8 Q g' d% F, C: _" S5 I6 a } catch (Exception e) {# {4 U) P: Q9 D
e.printStackTrace (System.err);
8 H R* P- i: O4 h) Z9 B }9 @$ P# c$ q; ~% z: d' L+ l. P
7 Y1 D' C# q7 `' |
syncUpdateOrder ();1 Z; J3 N# S; I* u" n
7 ~- C+ k& z2 C6 Y$ N) d1 E, \' C try {
$ ]+ S& I. n* ^) Z( j modelActions.createActionTo$message
) [# d( \0 s) ?1 t6 k (heat, new Selector (heat.getClass (), "updateLattice", false));6 x. e( T1 r5 p! C' ?
} catch (Exception e) {0 I4 f5 x% z+ }4 B
System.err.println("Exception updateLattice: " + e.getMessage ());1 T/ x' t7 _) C5 h& T
}# }& A' M+ T8 }( W6 A7 Y, b
" ?) n' l, X( I, o3 T; ~
// Then we create a schedule that executes the
8 H" Y* o1 O- e! { // modelActions. modelActions is an ActionGroup, by itself it# u( u. a3 A {( [
// has no notion of time. In order to have it executed in9 a3 g7 n# R& ?9 l# W, A( U
// time, we create a Schedule that says to use the
4 j2 }. \" ?: w. q; k0 Q: Q, M // modelActions ActionGroup at particular times. This ^8 x9 A. `: P: n t
// schedule has a repeat interval of 1, it will loop every
. R5 P- F% q3 v; ^( ` // time step. The action is executed at time 0 relative to
3 w* T! U/ m, T }" s" D4 q // the beginning of the loop.
# G9 G. [' b9 L' V, j8 K
8 I$ J! I4 e7 I' R( v! _3 f& ] // This is a simple schedule, with only one action that is$ ?& h9 o* o3 D1 u7 o. [
// just repeated every time. See jmousetrap for more" n- y0 k5 U' v ]1 P7 Q
// complicated schedules.
- S) H/ r. K# z8 ?" I; ^. t, Q & E. J# Q6 i/ J1 m
modelSchedule = new ScheduleImpl (getZone (), 1);; T" j2 V |/ v, q" u8 C$ {+ E
modelSchedule.at$createAction (0, modelActions);+ G1 ]7 z: \* Y* U
: z% l* I( {* }* i; { ` return this;8 ~' o/ y* N. @" j2 O4 K+ {
} |