HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 x( |, [$ w1 |% d0 |1 B, N$ a9 ?& e( r/ u7 j( {0 o; q: R$ ]
public Object buildActions () {3 j+ ]* ]8 n, ~
super.buildActions();
( F7 I( y# ?% T. x _' ~! i
; A$ v7 X6 l9 x: `2 {. s& O" a // Create the list of simulation actions. We put these in
1 T7 r+ ~) Z' K# x1 _ // an action group, because we want these actions to be
: F5 n7 J! `) _9 h, y# i // executed in a specific order, but these steps should
1 Q) m3 o7 t- `8 G4 N3 a& h // take no (simulated) time. The M(foo) means "The message' ?3 ~( k9 G# e3 i, B4 ^
// called <foo>". You can send a message To a particular; T. @* v, x3 i8 \" p. ~
// object, or ForEach object in a collection.
5 z' L! v3 x: y& p4 [7 m
/ H/ a: a, R8 b r // Note we update the heatspace in two phases: first run
8 R& Z# J" `" S // diffusion, then run "updateWorld" to actually enact the
# `" W" ?* C7 C) a9 u // changes the heatbugs have made. The ordering here is
. M/ n& J* ^7 [ // significant!
5 D9 I! \5 W' y5 U6 Z
. B$ l; e* c8 \8 _! b // Note also, that with the additional
6 a- R, T0 U4 V2 m8 ? // `randomizeHeatbugUpdateOrder' Boolean flag we can
) j+ b8 S" c0 N // randomize the order in which the bugs actually run
2 p. P% a# P; m- i" ^ // their step rule. This has the effect of removing any
, u( f9 K. D" I3 l" D/ A8 I // systematic bias in the iteration throught the heatbug
! B# |& F6 R( {: `6 P // list from timestep to timestep& ^( @, V) j. x$ ~: x" l
7 X, W* e1 x2 ]( Q% ^ // By default, all `createActionForEach' modelActions have) s0 ]* Z- N. w+ P) o% c
// a default order of `Sequential', which means that the
5 L8 ?+ |. W$ s // order of iteration through the `heatbugList' will be9 B0 ?, b1 d; v0 K+ y6 W7 D4 |
// identical (assuming the list order is not changed& k' H! X" ^) p! B# u1 t8 ]8 X
// indirectly by some other process).
, i, v O( T2 I; {9 S$ k
* N- O. x7 S; |7 g/ v# B) M modelActions = new ActionGroupImpl (getZone ());0 D8 }( E. J9 D3 J$ d0 e- W" M
7 D4 b) Y5 P1 X7 y
try {
& y! l: D+ l, z4 d modelActions.createActionTo$message1 D4 x" i: C& T$ ?4 [# s
(heat, new Selector (heat.getClass (), "stepRule", false));
; T1 I( N! V6 I1 O } catch (Exception e) {
. y' K7 d' a# \+ t M8 u! U System.err.println ("Exception stepRule: " + e.getMessage ());9 Z) Z: {+ G' [9 m' P8 F* v
}
1 @- N. O8 U& W; ^
0 C: H3 y5 @* r% J1 } l" z try {
/ R3 q p; ?9 p+ O8 ` Heatbug proto = (Heatbug) heatbugList.get (0);! J% I) x8 ?8 F6 t: Z! h
Selector sel = / W5 \4 n# Z: Y; J; m5 C3 G
new Selector (proto.getClass (), "heatbugStep", false);+ u* q# D! i% v* o
actionForEach =
2 ?$ r0 D9 y, d J3 Q modelActions.createFActionForEachHomogeneous$call
. ?. g3 B& x# e% g8 | (heatbugList,$ H0 `1 y. k3 D# o" j! E" @8 e
new FCallImpl (this, proto, sel,; H" m, U/ D7 U- ~+ u/ X3 ^; ?
new FArgumentsImpl (this, sel)));
4 m5 ~5 z( i" ~! T } catch (Exception e) {* z8 R( s. |; ~9 C" n q7 g( I4 `) g
e.printStackTrace (System.err);' g* ~3 p% J+ a3 I8 T" \) G$ ]
}
/ `6 Q0 p/ U3 | 2 Z+ ]( I3 U8 X% ^7 R6 h2 J
syncUpdateOrder ();
% Q) t$ Q) K7 h7 [$ c! A" p& A p4 ~/ ~. u
try {. p8 h5 x; r9 t
modelActions.createActionTo$message ' d* |- T3 Z8 d$ g1 P
(heat, new Selector (heat.getClass (), "updateLattice", false));- Q& w8 A* P% h
} catch (Exception e) {
) r' ~6 }, O- g' z6 u0 w+ Z System.err.println("Exception updateLattice: " + e.getMessage ());
( v. q8 t( v1 \( b* [ }7 H3 I% l1 K* H- z" G
7 H8 x$ n' U& H4 r // Then we create a schedule that executes the2 c# k+ Q) T9 u- n/ d% p$ A
// modelActions. modelActions is an ActionGroup, by itself it
/ ?- ?, s7 J1 f C1 D+ I // has no notion of time. In order to have it executed in2 v2 U, @& c% i# n! ]& d( }' D
// time, we create a Schedule that says to use the
0 Y& u$ H8 h$ B2 g" v! ? // modelActions ActionGroup at particular times. This
3 O& M/ {" ]" Z% T4 u2 _5 R; G // schedule has a repeat interval of 1, it will loop every' t* X4 J0 y# C& `7 X* T# y
// time step. The action is executed at time 0 relative to
- Q9 t% q* k: {+ b // the beginning of the loop.5 W. q) q. l( K( O9 m: k+ o
) ^2 I" y+ `5 k0 x6 v // This is a simple schedule, with only one action that is' a! f, [, `' @. G; {, ?" }
// just repeated every time. See jmousetrap for more; o7 F0 Q7 }; r2 ~) B) ]4 K
// complicated schedules.% }/ _/ Y' K; W/ I. Z3 @2 I
" Z6 |: b9 q7 w+ s
modelSchedule = new ScheduleImpl (getZone (), 1);
0 t9 p. e! a3 A2 y h. C modelSchedule.at$createAction (0, modelActions);
' {# V% f7 @0 s3 P
9 R! X! ]1 X" k# L return this;
" Q* `, i) W2 e w) y% _4 ~" B } |