HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 e" J4 Y$ l9 o+ g0 j
9 _' {4 I& i0 X$ u2 d
public Object buildActions () {
6 l) E M( r3 w super.buildActions();
, [) [( ~# z7 m" T O- T5 k( n # I8 r+ |9 Z& B. D9 M
// Create the list of simulation actions. We put these in
! g' @& p% ^' z' V# I0 G // an action group, because we want these actions to be8 Y5 l' P1 w$ u
// executed in a specific order, but these steps should
- E9 F: e C: S- ] // take no (simulated) time. The M(foo) means "The message
& K, Z+ {; n4 H0 R Z // called <foo>". You can send a message To a particular
5 `# U3 m! \% w. K5 }3 @2 D // object, or ForEach object in a collection.
6 m$ |. g6 I- h5 E
% I) c: V8 K8 c // Note we update the heatspace in two phases: first run
" `6 v% ^- f5 y. E# N // diffusion, then run "updateWorld" to actually enact the- D: b: b+ P* _/ [, J s4 b
// changes the heatbugs have made. The ordering here is3 J# e! \- |" [- [
// significant!
) D% r& Z8 s: e
$ v* _+ L$ {: H6 { // Note also, that with the additional: }' C# |) K* @; d
// `randomizeHeatbugUpdateOrder' Boolean flag we can/ N# a) u; j7 O8 w$ |
// randomize the order in which the bugs actually run3 [, n; f6 R6 \' }3 H
// their step rule. This has the effect of removing any+ t% b8 V9 f- Y: l$ I
// systematic bias in the iteration throught the heatbug7 Y3 t- X* P: Q7 v+ ^7 o$ o( L( m6 A
// list from timestep to timestep! j( x) e! _( D. y* H8 h2 D
+ O+ W# {6 o+ C0 k: m
// By default, all `createActionForEach' modelActions have7 U/ \- x% \- L5 s; Z' b
// a default order of `Sequential', which means that the
* m2 S0 ^8 v: J2 U |2 ` // order of iteration through the `heatbugList' will be
% a7 @; `% X8 S3 F. r: N% W // identical (assuming the list order is not changed
; w1 B6 k0 E/ I+ E* o2 p7 M // indirectly by some other process).; T7 z# v" h3 z5 a# c
2 v: a8 T% R) w7 z% p
modelActions = new ActionGroupImpl (getZone ());. S! }* R3 z$ w2 M
* A4 d% e G2 V- o
try {
; v/ A1 O0 {3 \" d modelActions.createActionTo$message2 O* A; `9 ]' r* E& [ }
(heat, new Selector (heat.getClass (), "stepRule", false));: x7 V( _* t% z! B, s2 A
} catch (Exception e) {
I- j8 W# H U& e; V+ r System.err.println ("Exception stepRule: " + e.getMessage ());
, ]2 }$ F3 m0 [: Z3 o" @ }
/ Z! e6 f5 h* d/ s! t7 r3 ]7 @& F* \
try {
( a2 @+ @( n& L2 W Heatbug proto = (Heatbug) heatbugList.get (0);9 z) ], B1 q$ L4 p8 }9 @
Selector sel = 7 e$ N7 b% r; M
new Selector (proto.getClass (), "heatbugStep", false);
# {: ^8 H+ r k actionForEach =
/ ~, d! @3 N8 z' t2 I! R modelActions.createFActionForEachHomogeneous$call+ P& p% a. F- Y, V
(heatbugList,
( ]/ A7 x9 v/ `/ m new FCallImpl (this, proto, sel,
/ x' P6 R2 F% v6 {/ s new FArgumentsImpl (this, sel)));
5 p: t8 f# u2 y } catch (Exception e) {
( m, O3 A; D, Q0 | e.printStackTrace (System.err);7 y" H" o1 \! E2 v
}
! x5 ]" Y6 U, S ]0 W1 e- F2 a
. e6 J4 {6 U& C' A syncUpdateOrder ();
( ]7 k6 J# ]" r$ o
$ X' Y( I: ]4 T" O+ e8 V try {
: T7 z$ R8 t, Y modelActions.createActionTo$message : h# Z; y$ q+ E
(heat, new Selector (heat.getClass (), "updateLattice", false));9 d/ }; c+ C4 ~
} catch (Exception e) {2 ^* |# b* }; t
System.err.println("Exception updateLattice: " + e.getMessage ());4 H! Q3 o3 m/ I/ z& V" l5 ^
}. P) p+ G6 k8 w/ K
# S' D5 B( K9 H. j) C // Then we create a schedule that executes the
L2 G4 H0 ~' f) R: l // modelActions. modelActions is an ActionGroup, by itself it
4 N0 H7 H+ E b6 N( F2 A3 g // has no notion of time. In order to have it executed in4 l3 K+ z; D: B9 ]3 s* O
// time, we create a Schedule that says to use the5 G1 V2 Y+ x( U* [4 X
// modelActions ActionGroup at particular times. This2 w% c8 q/ w7 G( K9 x5 R% R
// schedule has a repeat interval of 1, it will loop every* T# h. w' @( F1 @1 ~
// time step. The action is executed at time 0 relative to
6 r/ Q( B; Q1 _, Q, Q& n // the beginning of the loop.7 t. s4 |8 L1 P8 x3 \ j% S9 h
9 Z5 r" ^- s& J- M0 G! t
// This is a simple schedule, with only one action that is
- ?. R( o+ B ]5 Q, |! ]1 j // just repeated every time. See jmousetrap for more" [0 {3 G$ V3 E6 {7 b
// complicated schedules.
* S+ B T7 X, Q
% s. l D' V, s' ` modelSchedule = new ScheduleImpl (getZone (), 1);
1 u! @/ i7 F$ a! l6 C& a; M1 \+ p1 C modelSchedule.at$createAction (0, modelActions);) j! z6 u# N( u. F4 u
: E8 ~: o" Q, {9 Y) v return this;
3 [* k: Q0 K$ I# Q3 S9 u/ B } |