HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ ~( V/ D# F* v9 ^- P' e8 h2 ]: r; a7 R) @* y9 h
public Object buildActions () {! ], s Y1 s6 ?" {! O- \
super.buildActions();$ V1 ~6 G/ Q5 r, P8 o+ T
; |6 j; k; C3 f0 |# M6 \
// Create the list of simulation actions. We put these in
0 G# @" ?! F, _; C0 {$ p // an action group, because we want these actions to be" Y' A9 N, `. C& M' B9 I
// executed in a specific order, but these steps should
1 A# k5 U. J4 m+ a! a; \ // take no (simulated) time. The M(foo) means "The message. Q. ^# P1 ]$ n8 d) p7 I: H
// called <foo>". You can send a message To a particular3 {* e; ?8 r( A1 J }8 s5 _$ C
// object, or ForEach object in a collection." A- Z) A2 x L% ?' S0 H; G6 J
8 b) b5 {4 w7 H, z- @8 W: |: U6 R // Note we update the heatspace in two phases: first run
; m& T& G" c) @% U3 c! @ // diffusion, then run "updateWorld" to actually enact the
; D l% g. |; u4 c+ ^ // changes the heatbugs have made. The ordering here is' W# ~3 O6 l* u% t+ F+ M
// significant!, Y& k9 b' e( E9 a& U1 W
$ T5 o& }1 j6 Q& z- x; f0 V // Note also, that with the additional
5 A2 p0 N) g9 M2 {5 K3 H* t* ~( u // `randomizeHeatbugUpdateOrder' Boolean flag we can: N" l! d- ?" ~4 A; Y
// randomize the order in which the bugs actually run9 {# M6 L) e1 A1 O5 e
// their step rule. This has the effect of removing any5 e e5 ~& s% k1 b- J
// systematic bias in the iteration throught the heatbug+ Q$ M8 v/ Y. ~- C* L& v) J
// list from timestep to timestep- `' V8 ^* U- D$ `8 z
; V. Z5 c" w# u8 Q- r% r
// By default, all `createActionForEach' modelActions have
6 ~# m9 u' K1 @) k5 V- Y& o) y5 F // a default order of `Sequential', which means that the
K0 W& F1 e7 q. E! F // order of iteration through the `heatbugList' will be) o, c; F1 M; y Z# c5 ?, G
// identical (assuming the list order is not changed
: A: P& n- R2 p* u // indirectly by some other process).
$ X8 @6 `! v2 o4 y) `# |) Q7 a
* [1 x7 W& N" D3 _) ] ]/ r3 Q, D modelActions = new ActionGroupImpl (getZone ());( G; @" a, q" y& r# i: X
3 ?4 @4 w# j1 `% R0 m
try {
: \$ A- r) I4 W5 Q7 Z. s modelActions.createActionTo$message5 j/ o2 } w0 ^$ u( j+ L, y3 _
(heat, new Selector (heat.getClass (), "stepRule", false));
3 o, T2 l9 `: S& T; K3 X; A } catch (Exception e) {
6 |5 O: y H# C6 P- m System.err.println ("Exception stepRule: " + e.getMessage ());+ e! g- J, r0 Z( m( T5 k
}
5 t2 j9 @3 M+ [% b8 P* @' @# N* I) [, N9 d/ K
try {7 G& V$ G- B) t' h$ m
Heatbug proto = (Heatbug) heatbugList.get (0);
7 _6 E0 ?+ j$ y, A! m# W Selector sel = \- d3 T' n) t
new Selector (proto.getClass (), "heatbugStep", false);
0 P8 m' q0 Y. F! u actionForEach =4 T/ F1 G% _* E+ q N
modelActions.createFActionForEachHomogeneous$call
7 d$ U6 ^9 W8 X T' m. l (heatbugList,
# R6 \7 H8 v8 j; x8 {& ] new FCallImpl (this, proto, sel,+ g/ `$ ?2 ]% G& a- \) b8 Z/ [
new FArgumentsImpl (this, sel)));
9 U/ M$ D8 Q) L3 f1 H! l } catch (Exception e) {9 L1 n( ^9 A3 N
e.printStackTrace (System.err);
5 ]0 C8 D2 v6 b' o }, f' U% T5 Y4 j0 J( V+ T. c# F4 H, d
+ |- ]9 p7 l$ i0 I6 I2 G& L' x syncUpdateOrder ();8 S, ^8 Y2 M4 f2 G1 ^; t% i ~
- A- q- @; b4 w: B7 o
try {% V, g* e* b0 H6 [, N) p9 k" F
modelActions.createActionTo$message 2 Q; Z x1 i% d2 D/ v/ \; D+ ]
(heat, new Selector (heat.getClass (), "updateLattice", false));
/ ]6 o- ?* _& ]6 A' x; P8 ` } catch (Exception e) {
# _3 J$ L; b: p: _: I System.err.println("Exception updateLattice: " + e.getMessage ());$ ?7 R, |3 }5 A. w% B! {
}
; y, f, c- Z" S
+ H Z0 E) t! y // Then we create a schedule that executes the
( b/ C' ^5 P8 J: M# ]1 v // modelActions. modelActions is an ActionGroup, by itself it
( N! \9 `) }' e: y9 Q // has no notion of time. In order to have it executed in# a. G& P5 U* W; l& _1 s+ n/ H9 K9 {
// time, we create a Schedule that says to use the
5 w5 `% o5 K3 \. q/ q4 B // modelActions ActionGroup at particular times. This
+ L, h* T, D- y5 v7 h3 R // schedule has a repeat interval of 1, it will loop every
T f. B2 I# x // time step. The action is executed at time 0 relative to
1 i3 Y$ m. N1 D/ } // the beginning of the loop.
! v3 |# r- O* ` l" [1 M) k/ _ B( `* U! N
// This is a simple schedule, with only one action that is
# f) k& `! Z$ T, `* g // just repeated every time. See jmousetrap for more/ G" {" f# \! y3 y; T
// complicated schedules.
) H4 l+ V8 _: `4 t5 i9 L
" A+ \# P! L2 G) z modelSchedule = new ScheduleImpl (getZone (), 1);$ L# @$ M. q j- x9 ~; O0 u: L3 {
modelSchedule.at$createAction (0, modelActions);% w. H" }0 j+ X2 V+ {0 X% F
- g: m7 T8 W' h+ {
return this;7 e" O* z3 ^( S. l, o4 |! B3 N- e
} |