HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 w1 }# G8 E0 U+ l
1 i6 i( a$ q$ o/ _$ E public Object buildActions () {+ r* C% p p7 g; V- ], W1 [. d
super.buildActions();. c- z& Q" F8 s5 t
& x1 C; [- ~. ~% X // Create the list of simulation actions. We put these in. e) U# L2 L" Y. T+ A
// an action group, because we want these actions to be
4 \6 F* M* M" g7 u // executed in a specific order, but these steps should* {7 `, y7 n. O: S# D9 F5 h# V
// take no (simulated) time. The M(foo) means "The message- T) O) l: Z0 O& Y
// called <foo>". You can send a message To a particular
3 Q8 G4 ?, K3 y6 f7 U# L // object, or ForEach object in a collection.. l1 D* s8 w- ^: f5 F. c
D) r: ^8 ~9 A+ t- K // Note we update the heatspace in two phases: first run
6 W; {) M7 W# M7 F1 m/ q // diffusion, then run "updateWorld" to actually enact the
; ?" H8 Z! ?1 q a // changes the heatbugs have made. The ordering here is
9 Q# `/ Y2 ], [7 c; u2 J; N // significant!
, f$ C; E, R5 Y/ ~) Q
% C& x7 N$ ?3 S. ^# A* i# j // Note also, that with the additional0 `) H7 z5 x$ o2 J- h
// `randomizeHeatbugUpdateOrder' Boolean flag we can
( f4 w" `/ c8 h9 e4 x; f A // randomize the order in which the bugs actually run
" U& X* p! V6 D+ K; `0 R* b1 T // their step rule. This has the effect of removing any
% v2 ^% g( F9 C& _, X+ z // systematic bias in the iteration throught the heatbug4 D% V& z6 R( T- ^. j
// list from timestep to timestep
8 f# ^9 W6 ] B" j$ P8 I- X. U - D9 J: o' _' X! A" l
// By default, all `createActionForEach' modelActions have% u6 n; D( i% e. P7 t
// a default order of `Sequential', which means that the$ t% p( w( K4 [: l+ E% X0 E2 C
// order of iteration through the `heatbugList' will be" x: z+ \7 R& i' C4 Q" s
// identical (assuming the list order is not changed
% S( ?+ m$ e! g& N; R- u // indirectly by some other process).
0 o; o6 v; T7 f! _+ P # F$ U) t" ^& M# a0 e7 e5 e+ x
modelActions = new ActionGroupImpl (getZone ());
0 [3 c" P8 T! ^, G3 ?1 S
! @% G' L6 `. W try {
* z% Q# D1 y* d% S modelActions.createActionTo$message+ T6 [% y B$ R& F' e/ W4 J
(heat, new Selector (heat.getClass (), "stepRule", false));
* E/ z2 r/ d3 _6 p H* I4 ` } catch (Exception e) {, M v+ o0 [2 y/ p1 B
System.err.println ("Exception stepRule: " + e.getMessage ()); l8 U. o$ H9 N7 Z& o: d0 ~
}
D6 k8 Y! F/ h8 Z# l4 R" r w$ g% X8 J( l8 a1 |
try {
9 Y& w& j& [$ D- ]5 M- _" g2 w Heatbug proto = (Heatbug) heatbugList.get (0);# H; y+ Z$ q$ G7 C: E4 ?
Selector sel =
3 s4 B, ] L+ h7 }" _1 x4 S new Selector (proto.getClass (), "heatbugStep", false);, H; w2 J6 v1 c# B1 U
actionForEach =
4 r6 B# I8 ?7 J1 Q% A modelActions.createFActionForEachHomogeneous$call
- U; U. P) o! `% l% Z4 L0 N (heatbugList,
1 M6 J! v7 W: v4 I: p g! z new FCallImpl (this, proto, sel,
; ^9 O* M3 E8 ` e new FArgumentsImpl (this, sel))); k: o5 m w* h" q. O) F7 {2 G7 V( q
} catch (Exception e) {0 u: G9 i2 |! e9 e5 Y
e.printStackTrace (System.err);
# e4 O4 H, C5 J1 c* M }
: J" p8 |: C) Y
I. Q2 C8 ^( X syncUpdateOrder ();+ W6 G: U) I* Y
4 U K' n1 e& f1 z: W
try {1 C4 w) f! h; R, O9 v! x% T
modelActions.createActionTo$message
& G) g2 m+ E& G+ O7 i$ Y9 C! Q8 {0 i (heat, new Selector (heat.getClass (), "updateLattice", false));
1 y- I3 n) S* f" P/ l* X } catch (Exception e) {: K* O" g$ Q, J
System.err.println("Exception updateLattice: " + e.getMessage ());
X! E+ `+ L m8 N }, o' ~" I/ K( Q/ U
: O/ [; _8 |2 U% E* i- p // Then we create a schedule that executes the# ]) H0 P& u4 b3 d8 }
// modelActions. modelActions is an ActionGroup, by itself it6 F% A1 b2 C( P& x: y
// has no notion of time. In order to have it executed in
" A- r$ S5 t% m: {! O* Q5 | // time, we create a Schedule that says to use the
! Q) S/ y0 q0 M: C' A$ C7 d // modelActions ActionGroup at particular times. This
# Z: K |! i9 m // schedule has a repeat interval of 1, it will loop every+ _9 M5 @0 k; C+ z5 V7 J
// time step. The action is executed at time 0 relative to1 q1 v' s- {5 N
// the beginning of the loop.
* S* Z1 @' k: }, h+ g6 l1 D% M
3 }( n! |0 J y0 I // This is a simple schedule, with only one action that is
7 j! y% o; E6 c3 H( S, { // just repeated every time. See jmousetrap for more
1 I- s; T: R4 [4 B // complicated schedules.
/ h- X$ A0 ^0 d6 f$ Y
9 W- [* W8 ~7 m, L modelSchedule = new ScheduleImpl (getZone (), 1);
b- C& O* J" h6 }5 i" W4 s modelSchedule.at$createAction (0, modelActions);% H: m+ ]2 M/ u' U# K" J
6 S$ F% g0 y5 j& {( E# G8 I
return this;
8 `# @4 S) N$ Z5 z0 h, ~+ I; \ } |