HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 b5 k* H( u; ^9 P9 \6 g0 W& Z2 ^. ]$ i# C4 k
public Object buildActions () {
6 ~' M1 n- N6 X9 C! u" m& k$ Y super.buildActions();
8 f3 X! t6 Z; h2 H3 f: Z/ @ ' J. p3 x8 [/ x- q. y) U: _
// Create the list of simulation actions. We put these in4 n% r* \8 v- n. z$ u; w0 e1 V
// an action group, because we want these actions to be
b7 w9 J. f! U$ f2 Z( f // executed in a specific order, but these steps should
/ ?& Y9 j5 ^ p2 t( x // take no (simulated) time. The M(foo) means "The message
8 X; g; ^5 z( X' d6 k3 I1 h9 c9 N // called <foo>". You can send a message To a particular% T9 [% A2 I9 L" C {
// object, or ForEach object in a collection.; s% \0 r/ i/ M/ _( _1 v, z
/ ~* c+ X$ L5 ^: D5 J // Note we update the heatspace in two phases: first run
: P H1 A( s% v // diffusion, then run "updateWorld" to actually enact the
9 q4 ?& k, A$ w1 d. [* x2 J# E. S // changes the heatbugs have made. The ordering here is7 u6 |' v' Y( y) ]% _$ |' ]
// significant!$ t& b/ ~3 H; F2 _
. N5 t6 |' X* c. h- `: ] // Note also, that with the additional
8 H6 ?+ f5 R% J$ P7 J // `randomizeHeatbugUpdateOrder' Boolean flag we can; q0 F( H0 h1 M) ]
// randomize the order in which the bugs actually run! H2 R, m9 c5 ~: k
// their step rule. This has the effect of removing any) D: s; r5 v; A R
// systematic bias in the iteration throught the heatbug
* H& _$ |: F3 m; j, t8 m // list from timestep to timestep
/ T# ^' R0 f, B
4 U0 h& t8 l) Y, C% L7 w/ j // By default, all `createActionForEach' modelActions have$ b7 ?* O! o/ Y5 H+ E+ X
// a default order of `Sequential', which means that the0 K8 g' ?5 Z+ @+ q# P
// order of iteration through the `heatbugList' will be/ k6 t5 l# q0 z! }
// identical (assuming the list order is not changed
9 `1 N7 M( ?" F% P* A% @ // indirectly by some other process).2 w l$ d5 } r5 J' Q8 c- B# Q
~5 I+ R# b" O# V: I" n modelActions = new ActionGroupImpl (getZone ());
' B, H6 _. _, M* U" M# ^/ \# s* O' w7 h G$ o) ?
try {
& R. P' J* {4 B# T$ ? modelActions.createActionTo$message# M+ x% |2 A! X* O2 h R6 p7 a
(heat, new Selector (heat.getClass (), "stepRule", false));' t! a' V6 C3 ]" r" i- J1 c+ F
} catch (Exception e) {
) D) M* A6 D7 L' k4 j2 g0 l8 O3 C System.err.println ("Exception stepRule: " + e.getMessage ());" m8 Q, d o* ?) z0 n# G) @6 X
}/ c9 ^8 _" w' v% X1 U
4 r2 L; m- s7 B- S& w: a" ^& F1 N9 F3 e try {
* f* G4 d& G+ y9 E( _- X$ D Heatbug proto = (Heatbug) heatbugList.get (0);7 u! {/ f$ a% `- I
Selector sel = 4 B$ q* ~ Z7 T% d
new Selector (proto.getClass (), "heatbugStep", false);8 @" K; ~! L6 p* Q2 n% C7 F
actionForEach =
- O" h' O* i( a5 w; {+ k; H modelActions.createFActionForEachHomogeneous$call3 r8 M% @6 R' S3 b* e5 l
(heatbugList,& g5 M$ _ F" G- b" E7 [ S
new FCallImpl (this, proto, sel,4 N9 _3 o, @, R- T+ s9 K
new FArgumentsImpl (this, sel)));8 J) d0 e2 j6 D; h' R& S/ I
} catch (Exception e) {% N! ~9 p# ]$ H$ V2 S0 _3 f( A
e.printStackTrace (System.err);
; a2 d) m1 o+ d# t- ^7 d }
: ~! ?9 Y4 R4 z: q3 y1 { 5 [' Z3 ` W0 t) e2 A; q
syncUpdateOrder ();
! ?" [ x/ Y! q$ m# k
$ R. O% M5 b5 ^+ ~: D0 K- f; ` try {
* _, b8 b. R8 q modelActions.createActionTo$message 7 F6 B: }$ G% c! K4 A* b0 c5 _
(heat, new Selector (heat.getClass (), "updateLattice", false));
4 ~! ]) w9 `& Z } catch (Exception e) {2 F9 J/ X( G+ s& x8 d4 v
System.err.println("Exception updateLattice: " + e.getMessage ());
2 ^- Q5 e) c, J# S1 x V# I }
! E( ^3 a6 `7 S, R4 T1 K
6 _2 Q% `( G: Q1 y, ]2 d, o! J" O // Then we create a schedule that executes the. \) [! y# M& F. a
// modelActions. modelActions is an ActionGroup, by itself it
/ d- j% j9 W" P; R8 p/ t4 L$ R5 H // has no notion of time. In order to have it executed in5 [7 j7 g- o9 G
// time, we create a Schedule that says to use the
0 c1 A3 @; i9 `: O2 W0 X9 v4 r // modelActions ActionGroup at particular times. This
2 e6 i0 M; S3 W9 x // schedule has a repeat interval of 1, it will loop every$ i) k: I+ H+ `4 v: V
// time step. The action is executed at time 0 relative to7 n/ }! x$ h3 d. U; V9 }
// the beginning of the loop.+ Z; S$ A' s; Q( }+ a q
8 i) \7 ]! `( G$ k9 `' k7 B2 ^ // This is a simple schedule, with only one action that is
+ L; C* B5 M; g/ h4 o5 b4 b7 s // just repeated every time. See jmousetrap for more* N* H) s. x( ~4 R5 |
// complicated schedules.! W' |7 b/ W. ~
; t; C* r5 v" D- Q7 |
modelSchedule = new ScheduleImpl (getZone (), 1);0 Y7 V" M, i. @( `
modelSchedule.at$createAction (0, modelActions);: |$ K z: H4 `" k f# W
% ^3 Y' @. T, E0 d
return this;/ c6 G# `1 T+ n+ w- w/ c. ~
} |