HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. ]' \( M8 z1 I0 f, b
( J0 `! R r: j" p3 t public Object buildActions () {
2 B; @: J$ M0 s2 [ super.buildActions();
, l( _& \3 F0 I+ p" y$ r* d* C : Y4 w& P; P# Z
// Create the list of simulation actions. We put these in0 n. C! h% i$ ?+ ~3 ~; ^( N/ [4 z E
// an action group, because we want these actions to be# A& \7 j7 k, U. ^3 R7 J) ^
// executed in a specific order, but these steps should8 z& i8 E' x$ ]; W& h7 D
// take no (simulated) time. The M(foo) means "The message
2 J( b2 X% d* y2 S+ w" J4 g7 G // called <foo>". You can send a message To a particular
; S: d: f' F# x$ C* T, O- K // object, or ForEach object in a collection.2 Z0 ?1 b, r( H D3 B. q, k
* m! ^! U5 G. | // Note we update the heatspace in two phases: first run
( d' z- r7 r6 x% D5 n/ D8 z- N // diffusion, then run "updateWorld" to actually enact the2 U1 L7 w2 G s
// changes the heatbugs have made. The ordering here is2 n( D) Q- s3 y% K
// significant!
; L" a8 j- l5 e' D2 P$ J ; ^9 Q8 L' X8 D8 e* ~
// Note also, that with the additional
9 j( ]3 w5 J0 G) ~5 g // `randomizeHeatbugUpdateOrder' Boolean flag we can' P0 }( Z" h1 G% A
// randomize the order in which the bugs actually run
/ i8 E! \, c t; @) b! r& m // their step rule. This has the effect of removing any
6 \' ]- q4 U3 {3 @" T2 t$ b // systematic bias in the iteration throught the heatbug1 o7 p) k6 Z, |, o: ]9 e u
// list from timestep to timestep# w, j p- _; u2 I
% O6 B# O0 }; I9 M- e1 U" A; \
// By default, all `createActionForEach' modelActions have
' S2 h+ B3 F* T& R // a default order of `Sequential', which means that the
% w. N4 G3 q7 u, B- i" T // order of iteration through the `heatbugList' will be
' f( L& d- S7 i0 T* M$ P // identical (assuming the list order is not changed
, y4 z& u. K, j6 G' C2 Q+ k // indirectly by some other process).
1 @) m% F s9 Q- q: H , k: C" q5 Z# a! }
modelActions = new ActionGroupImpl (getZone ());
$ K i' U. d- F" X/ Z+ K& F
1 W" u9 A& r( y) d8 P2 F0 t. { try {; G- {. x9 @) I
modelActions.createActionTo$message- w k# e% y% s$ P" `( X
(heat, new Selector (heat.getClass (), "stepRule", false));3 @( X: M1 M- z7 d. Z) G2 H
} catch (Exception e) {8 u5 Q0 V Y3 _8 ^- d/ j
System.err.println ("Exception stepRule: " + e.getMessage ());
* e7 g& D( z8 e* K }- H& w) ?6 K+ q3 v, {: o& ?
" G2 I2 Y( W2 Y2 G: B
try {2 D) n9 u, u! W( Y0 _. _' h
Heatbug proto = (Heatbug) heatbugList.get (0);3 }# B" X' M* x
Selector sel =
9 e% v! s: {, e; f( q new Selector (proto.getClass (), "heatbugStep", false);8 [: f4 x1 v! l+ Q$ G1 B8 d
actionForEach =
7 u K* G. i6 W( e3 v modelActions.createFActionForEachHomogeneous$call$ C. G" i3 J3 S4 ?1 t$ `; |9 M
(heatbugList,6 G4 P: L" m( h: P7 O( m/ f4 g; _- c% v
new FCallImpl (this, proto, sel,& C# J6 i6 I: O3 \& q$ V( s: \+ X
new FArgumentsImpl (this, sel)));
& I- j) Z4 G6 A# v1 Q/ g' x } catch (Exception e) {
3 v( @! b2 q; i5 O e.printStackTrace (System.err);: l3 R/ Z( Q: ?5 h
}
( v2 D3 [. [: L2 m# ~+ x# h1 u2 ?
% @. I5 {" u: n# h X% {% G syncUpdateOrder ();0 I( k! P; z8 |; x# c1 b+ g1 T- X
3 b7 D+ }# @5 r& I1 N# F try {) {* H9 N% L- W; N
modelActions.createActionTo$message
/ d, h# F- ?) m (heat, new Selector (heat.getClass (), "updateLattice", false));. f# t/ m [4 v$ ?
} catch (Exception e) {! q& A% J$ D& A: h x/ j, `! f
System.err.println("Exception updateLattice: " + e.getMessage ());
+ ?- F1 f+ u) |2 X }$ q( }- r+ O8 ?3 v# r: o# e
1 M0 F: ?% s4 L
// Then we create a schedule that executes the
4 c, K: J# C2 L% F, y // modelActions. modelActions is an ActionGroup, by itself it6 y9 r7 U4 j1 x2 W/ e& c
// has no notion of time. In order to have it executed in) ~/ D" `$ B# b. f' D$ h
// time, we create a Schedule that says to use the. ^: w u# m; |0 b1 k
// modelActions ActionGroup at particular times. This9 B- N: d, p7 }' A. ^/ p( x
// schedule has a repeat interval of 1, it will loop every' x' P/ `: e' i
// time step. The action is executed at time 0 relative to; B# ]0 V" H: D7 u) @" z' h0 A- A" x
// the beginning of the loop.
3 ]$ P. i4 _, Y, m4 O, W: t% X6 ]9 s; w4 \4 c6 X! z6 T* [* O
// This is a simple schedule, with only one action that is( q5 T3 ^; D- E4 X
// just repeated every time. See jmousetrap for more
. w9 g( r B& r4 K) x$ C // complicated schedules.& D% Q V1 @2 \& q# h9 O
7 }8 H, A. z* E- v2 e) K+ { modelSchedule = new ScheduleImpl (getZone (), 1);8 _# Z/ j# Q4 J3 H( P+ U. F' b
modelSchedule.at$createAction (0, modelActions);
4 C z) z5 l* Z/ Y- Y$ c- {
' e' W+ R: K" Y. [2 N$ Q$ e) ^6 s J return this;+ J6 ~, `; ~. @6 h+ o/ Z
} |