HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) r' X/ |, W) n4 I6 q3 a: ]; E
' j6 u9 @! s. ?2 u( N public Object buildActions () {
- s2 M( ^) a' t super.buildActions();+ [' ^5 Y0 F% P% \. F7 P
1 Q# A( a+ [' Z( x
// Create the list of simulation actions. We put these in4 |* }0 `: v8 n2 G
// an action group, because we want these actions to be
" i' r! T5 ^5 O# `. F // executed in a specific order, but these steps should8 ] S, o. h7 `* t* g) K1 O
// take no (simulated) time. The M(foo) means "The message+ q* ^! P! W3 O* \0 V
// called <foo>". You can send a message To a particular" }9 s. V- e9 U* ]/ U9 c: F! D7 O
// object, or ForEach object in a collection.4 `: e6 o: x% @* f0 t% N
, d1 C$ y$ Z3 H3 b6 F4 R# J // Note we update the heatspace in two phases: first run
; r. j. t6 q# d5 V ?' H // diffusion, then run "updateWorld" to actually enact the! ^! a# h8 O1 ?# ^( p4 W$ @& N& n8 i
// changes the heatbugs have made. The ordering here is' A+ M' G' N& E0 Z" i$ L* ]
// significant!
' M. A+ F) X1 _! ?" T * n5 U9 E6 m; L) n* }
// Note also, that with the additional
4 f- o' y* K1 G- F+ ~ // `randomizeHeatbugUpdateOrder' Boolean flag we can4 D4 T5 d% U3 t' g6 g6 C
// randomize the order in which the bugs actually run. E4 i1 }& ~& K6 H: z# Q- D
// their step rule. This has the effect of removing any1 ]8 U6 c7 `* m6 j
// systematic bias in the iteration throught the heatbug/ q+ [$ Q- i, M6 A# x# ^/ ?
// list from timestep to timestep, A% F0 R+ h; H9 M/ ~$ x' l- k5 o
: r/ t( E" e) M" v* P
// By default, all `createActionForEach' modelActions have
4 `* }5 M. d- z3 z+ \ // a default order of `Sequential', which means that the
0 H x( `# R) v; K, b% \% ~ // order of iteration through the `heatbugList' will be
- j8 i+ _9 i+ r3 c' q1 t // identical (assuming the list order is not changed3 K4 {6 r' h- ~$ K& P1 R
// indirectly by some other process).+ f' Z! _2 `0 D& ^. }% D
7 {3 |- F7 x4 z$ I0 B) \4 t modelActions = new ActionGroupImpl (getZone ());/ {: g: @9 B- F I5 `
3 }. |3 C/ E! @1 U ]: J try {
. O- M( ~0 o9 N6 m, ]) ` modelActions.createActionTo$message
/ x- z3 I# q7 ^& X5 n8 B6 Y (heat, new Selector (heat.getClass (), "stepRule", false));
/ C( d; g: V9 F9 ? } catch (Exception e) {
# t4 M1 _( H2 ]) H System.err.println ("Exception stepRule: " + e.getMessage ());
8 }4 _! Q `9 a4 \! R, F }& k q2 |/ U* J! [( R/ ?; H! J: U W
- i$ |0 F2 }- i5 R! l- T try {+ @; a* L R8 v! j
Heatbug proto = (Heatbug) heatbugList.get (0);
& Z# D; Z+ f) v; J Selector sel =
2 N, ?2 k* }; |* I4 b. x new Selector (proto.getClass (), "heatbugStep", false);# d; }6 F. N7 z3 R8 T
actionForEach =3 j; G* d1 x" G$ V" g2 G
modelActions.createFActionForEachHomogeneous$call3 x7 G$ m0 n( ~/ k/ Z5 S: c) V
(heatbugList,) @, ~+ F. s% j+ z/ i
new FCallImpl (this, proto, sel,3 y; v0 j: B. h) p# @" l: ?
new FArgumentsImpl (this, sel)));) ^8 `4 r; W9 O
} catch (Exception e) {* |! e5 z4 _9 l h' {/ A
e.printStackTrace (System.err);
* P3 ~, F0 d" q3 x1 k }
5 {5 |- L- X; b- N# u; `' q ! i* a- U5 B# P
syncUpdateOrder ();
5 U) [ ?& h; n+ ]2 ] Z. ]: `) L/ ~% w: I. d e
try {
: M" ], a! L/ ^' ?* K6 G modelActions.createActionTo$message
1 R* H C+ K' u' Q' b7 W: P (heat, new Selector (heat.getClass (), "updateLattice", false));
/ T5 C& g& x$ g" Y0 i- r } catch (Exception e) {
7 H% f+ G5 V7 A. D7 e2 v/ I System.err.println("Exception updateLattice: " + e.getMessage ());* y( J% [5 P8 T
}( p. G* {% f1 R; {" ~# Q" i
! T& |+ A6 q3 M* N
// Then we create a schedule that executes the$ z, N, r* p. J! U' M- f) b
// modelActions. modelActions is an ActionGroup, by itself it4 S4 `- s5 O! e' S' r7 h% E7 ~, L
// has no notion of time. In order to have it executed in
; [8 y y# s2 M- Z) D# [' Z' i, Q // time, we create a Schedule that says to use the
2 E- i* J& w( [, C- D3 b // modelActions ActionGroup at particular times. This2 U. ], ]# w$ E( R) G4 t
// schedule has a repeat interval of 1, it will loop every
7 J1 A, o7 b- d# r/ Y // time step. The action is executed at time 0 relative to
* e) \" j$ S6 }9 d2 Q // the beginning of the loop.
& i' C: R0 _; h
+ r* ~) E( \6 x$ I // This is a simple schedule, with only one action that is/ v9 G. z/ ^' O/ w* o" R
// just repeated every time. See jmousetrap for more
4 M1 s! ]7 Q8 ~1 E5 p! _8 G // complicated schedules.( d8 \6 _1 Q% e) _, K
' |- W( s9 h# p. J4 w$ f
modelSchedule = new ScheduleImpl (getZone (), 1);% q+ |1 f6 |8 U1 O
modelSchedule.at$createAction (0, modelActions);
; ?. {* X- F, z* a8 {4 u2 Y. O$ X, ] - c4 |% V8 J5 A( R4 Y5 a6 E1 ~7 U
return this;: }" V7 |5 {) x" {
} |