HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
}+ G" m7 A- s! R5 K& u$ ]' L
) i+ W& Z2 u- H) E4 g. X' J public Object buildActions () {2 O2 [0 n* M, R# @$ H
super.buildActions();% |. M4 G4 u! A! k# P
1 Z3 @5 p" X( t
// Create the list of simulation actions. We put these in
8 y$ O3 A% t/ i k // an action group, because we want these actions to be
2 y/ p5 _; E- N! }! @) f9 \ // executed in a specific order, but these steps should
; ~4 h7 v$ Y& R$ R // take no (simulated) time. The M(foo) means "The message* d% V' @8 q! v7 J; X" B$ Y! ^
// called <foo>". You can send a message To a particular5 G. [9 G. d' M5 w0 X3 t
// object, or ForEach object in a collection." [. K3 I+ p5 B4 g
9 x8 A5 B9 n4 [
// Note we update the heatspace in two phases: first run' f4 _; T$ t. g6 y
// diffusion, then run "updateWorld" to actually enact the
/ @& Z7 i4 L* e+ u4 A6 x // changes the heatbugs have made. The ordering here is f. P! x9 i8 | s" Z9 x
// significant!
3 v8 \. P! z8 F% D ; D6 E) {6 G: G9 c! Z# Z( J) Z+ N
// Note also, that with the additional
( B' Z0 O b/ L // `randomizeHeatbugUpdateOrder' Boolean flag we can
^) ~: Q) R M // randomize the order in which the bugs actually run
# a4 v/ T( j, T // their step rule. This has the effect of removing any* ]0 n6 g y! _9 |
// systematic bias in the iteration throught the heatbug
( g# z& I; I* A1 z5 X% e // list from timestep to timestep7 v3 |2 S2 H6 T4 Z- B
3 D' A5 {9 V' N* @! n$ w$ n' b // By default, all `createActionForEach' modelActions have9 ]& a: _3 h! K
// a default order of `Sequential', which means that the
" @0 E C8 P" J: U& c9 r // order of iteration through the `heatbugList' will be
, Y" t4 d+ \8 r" M5 @ // identical (assuming the list order is not changed) t8 q+ w7 ?2 R
// indirectly by some other process).
R2 [4 S# b: \, @ - H! D" d) u, c& [1 S8 J& U
modelActions = new ActionGroupImpl (getZone ());9 J6 f0 {( p4 P' k
}- l6 @. ]* m try {
& u9 o. w+ _4 J5 j( k0 E) z9 \ modelActions.createActionTo$message3 W/ f) I; G3 |' x8 k. x" Z4 O
(heat, new Selector (heat.getClass (), "stepRule", false));2 g4 P ~0 w: |1 V* C. @
} catch (Exception e) {5 ~, Z5 D" G# W4 L2 u$ H
System.err.println ("Exception stepRule: " + e.getMessage ());
, h: Y% z# g# `1 R; B) z8 c }/ L2 k' s8 U1 \! m$ [
5 P7 m# N! T* h% c0 m) T
try {8 h2 B) b* W1 u
Heatbug proto = (Heatbug) heatbugList.get (0);6 N/ Y" {9 {$ x
Selector sel =
$ _$ |) O! I( O; ~, Z4 }8 p0 W new Selector (proto.getClass (), "heatbugStep", false);
' |# v0 G" X2 M% n. l% ]1 J! d6 L actionForEach =) L |" Q* a* ]: V3 x
modelActions.createFActionForEachHomogeneous$call
" l+ w6 }9 `4 Q: {3 t (heatbugList," Q1 |" V5 R- ]) z+ p5 v
new FCallImpl (this, proto, sel,
% I1 z7 r; m% Y# E, o new FArgumentsImpl (this, sel)));
1 ?6 ]- U" v& {, B } catch (Exception e) {4 C% Z- s6 W5 ?6 J( x
e.printStackTrace (System.err);4 P* B) Q5 _/ y. ]
}
% O0 L+ t, w; E % H5 n) d. \3 R* f% T3 F
syncUpdateOrder ();1 I) M6 {0 Q. t+ h- f' i) [
M2 p0 Z$ n3 k0 L3 ?0 I# h% ]
try {9 _2 z, D: ^- ?* ?; n% _
modelActions.createActionTo$message , }. X+ P) |9 D
(heat, new Selector (heat.getClass (), "updateLattice", false));8 ?$ M% y1 x& b) K( O
} catch (Exception e) {
/ I/ \$ w' p/ J. c4 O System.err.println("Exception updateLattice: " + e.getMessage ());
; g# e: w. l2 {2 M }9 m6 f* I( y/ O" B5 H" ?& v
: E6 S4 S* P6 m/ `1 }' c" P/ Q // Then we create a schedule that executes the3 F0 c! E4 B* m u( [" C5 M! h
// modelActions. modelActions is an ActionGroup, by itself it
# Y. f3 s2 v$ w W$ F1 t // has no notion of time. In order to have it executed in
1 R! @8 V" B" P2 k7 Z- ^& D // time, we create a Schedule that says to use the) h9 W n, |5 A7 B) i
// modelActions ActionGroup at particular times. This
' Y4 a; o1 l" I7 y1 {4 D, ~( l1 Y // schedule has a repeat interval of 1, it will loop every
4 r, O( t6 d5 N! b4 x( p // time step. The action is executed at time 0 relative to/ ? N1 W. ?9 l- F! X' D; `! R+ [: n+ B
// the beginning of the loop.: r! [: K4 c5 Q& ^
- D& S7 C4 X2 v, ~2 K6 g // This is a simple schedule, with only one action that is+ w1 e" ]; G- t+ D* k
// just repeated every time. See jmousetrap for more, r9 m- U3 z- C7 }9 d; E0 v) `
// complicated schedules.: v1 Y! e; Q* s3 o* P
7 w5 e7 ]- S# {/ g modelSchedule = new ScheduleImpl (getZone (), 1);
5 a+ ?; g4 I9 t" o& O modelSchedule.at$createAction (0, modelActions);2 ^ P# s- E+ S
$ I% B% J* X4 M return this;' S( @' c, k0 w+ @% w% a( u/ B% z
} |