HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ x' `1 g) q, y4 a8 V* e
& ]6 r4 A0 M% j3 G& f4 ^ public Object buildActions () {
P9 c" e0 q7 w: V( M6 M super.buildActions();4 W$ E0 G& X5 P
3 v$ [* ~& H: Y* U/ `% a/ C // Create the list of simulation actions. We put these in
9 c; t L5 ^: O( B2 q // an action group, because we want these actions to be$ r6 q4 I& F# h9 N3 e0 F
// executed in a specific order, but these steps should. h7 L+ F7 W4 m5 [
// take no (simulated) time. The M(foo) means "The message
" i( ~6 P2 x6 _) f6 G // called <foo>". You can send a message To a particular
2 G4 R( o w, l: d) x // object, or ForEach object in a collection.% s) r- `, }" Y( i. s" i& v' j4 s8 Q
1 ]0 K7 H. g; X. i/ q$ V0 W% s# ` [ // Note we update the heatspace in two phases: first run& i* S9 i9 E3 O! f: N
// diffusion, then run "updateWorld" to actually enact the
( x# X+ a3 N0 ~# P( ^! L // changes the heatbugs have made. The ordering here is/ G9 h* k# c3 V
// significant!1 `* K6 E+ E8 z' d
# a( p/ `5 d# L2 p/ i$ h# W& ~! c // Note also, that with the additional
/ U: S: |& Z. S p2 }8 }# ` // `randomizeHeatbugUpdateOrder' Boolean flag we can
; O% y+ D8 W! Q/ @: E5 f# I // randomize the order in which the bugs actually run
7 e' Y5 e! G0 y1 G0 c // their step rule. This has the effect of removing any ], J: m. M! Q. W
// systematic bias in the iteration throught the heatbug
$ r5 s! M O3 F! i0 i // list from timestep to timestep" O0 s3 o; i) e$ J& |. G+ w8 @. W
, ]# `1 |% b% j- X M // By default, all `createActionForEach' modelActions have/ Y# A* a! Q3 L
// a default order of `Sequential', which means that the
+ Y2 @, e1 V; @% Q* z // order of iteration through the `heatbugList' will be$ L! U) A) ~+ U5 ]" g
// identical (assuming the list order is not changed
: y# N1 |9 B3 F: i // indirectly by some other process).& D$ D* }) b6 T" y/ x
8 L1 N; w1 d% |3 p1 V
modelActions = new ActionGroupImpl (getZone ());
: z3 [" t, D6 w5 }* Y: s7 I9 q) L$ `* o2 |& o& E$ Q9 ?' y) i/ b
try {& H3 b; J% o" R6 e" |
modelActions.createActionTo$message# q7 K7 O4 F# a& z9 h* n. a
(heat, new Selector (heat.getClass (), "stepRule", false));
4 B# [) b" P+ z7 E$ X3 r } catch (Exception e) {4 f; @3 J1 f* {
System.err.println ("Exception stepRule: " + e.getMessage ());& P' b( f/ I) F8 q2 G. Q
} Q# R0 e( T. K& _; Z+ o! a$ T5 b% t
, [4 R/ m7 N( E
try {8 K4 L7 L8 v- i) C' L8 r4 Z0 d- f3 i
Heatbug proto = (Heatbug) heatbugList.get (0);$ B2 C' |/ n5 s( w( B8 p% Y J& Q
Selector sel = H' e5 L8 G2 \( W' }* L
new Selector (proto.getClass (), "heatbugStep", false);2 k, ^$ @# @% S8 M, ]8 F
actionForEach =
1 ]* X! ^) y/ w6 X% V" C modelActions.createFActionForEachHomogeneous$call
- @% \) c' \* J# W y% w5 } (heatbugList,7 u( e% h$ d4 k6 y& u$ H
new FCallImpl (this, proto, sel,# \) y- m+ m0 w6 ^) z% G
new FArgumentsImpl (this, sel)));
+ P4 K3 n$ f- U e } catch (Exception e) {: L3 `* J9 @9 ~% Q J0 X. I, ~
e.printStackTrace (System.err);
2 K+ w5 f) a- i# v# N }
1 n; ~/ [% P- u$ g7 K: P. L' Q
! Z {3 A3 m3 H# w( [) m syncUpdateOrder ();6 G# u! k# v4 ~- _9 j5 Z5 B i0 J
* Z0 o6 Q+ P$ l- A6 u$ u
try {
3 u( d; R0 D9 g modelActions.createActionTo$message
, J) h9 r6 R- t9 N1 w (heat, new Selector (heat.getClass (), "updateLattice", false));# |+ p) v" X& F6 x' G5 O
} catch (Exception e) {
$ P" k; M# ?) q0 Q9 Y System.err.println("Exception updateLattice: " + e.getMessage ());9 ` O6 k! Y& n' t4 R; Q+ _6 Z* s& h
}. ~% B6 y6 l0 e- y& g O8 S! d3 E
, [% K' t8 T$ t) b% K+ d // Then we create a schedule that executes the2 h4 n# M/ V+ G$ W5 \
// modelActions. modelActions is an ActionGroup, by itself it3 F n* F' a- }* g
// has no notion of time. In order to have it executed in
0 y, K [/ k9 n& k // time, we create a Schedule that says to use the, x' o0 P* n N. y: X' ], P1 h/ f l
// modelActions ActionGroup at particular times. This3 Q) C) t* P- X P
// schedule has a repeat interval of 1, it will loop every; i) b. s0 L9 `7 T; B. e' d- O
// time step. The action is executed at time 0 relative to
( {" |; f% x5 A+ [ // the beginning of the loop.8 l' q t' r2 r: I
* R0 \) \. |8 ?; F5 A( Q // This is a simple schedule, with only one action that is
9 S( k+ E( j- M" d5 a: F // just repeated every time. See jmousetrap for more
5 J$ h3 S# E4 y3 I- G& k // complicated schedules.5 \3 {: Y/ [) k, Q9 f' U2 O: m
; n- X1 J6 e% ]/ V* Q
modelSchedule = new ScheduleImpl (getZone (), 1);! t+ m1 Q* J1 J& p0 y' E
modelSchedule.at$createAction (0, modelActions);% M' w9 Q) K$ |7 M4 T9 \. l" o8 i* [
, |9 k, J% V$ U. X
return this;
; m/ B& B- [# e } |