HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 V! @2 s% u% s, e; ~' C0 i: I1 S& y
: m0 s, ^ W# y6 j: L W6 F, S* f public Object buildActions () {
* g2 ]6 n" z. ~( Z2 n. o7 k super.buildActions();/ O2 R v: }# U) H+ C9 c+ X
7 l& q) s. ~9 q2 }9 |7 G/ r! |0 x // Create the list of simulation actions. We put these in) t: E( c& U- e7 B
// an action group, because we want these actions to be
6 w1 e& C# X8 o9 J- M; _; ^ // executed in a specific order, but these steps should
3 w8 b, f& t2 V3 h; { // take no (simulated) time. The M(foo) means "The message2 L1 ^0 `$ T4 P
// called <foo>". You can send a message To a particular
, O3 z e) i$ a" Q3 Y9 q ^$ o // object, or ForEach object in a collection.
, r0 \0 e" h* q9 @$ Q- G
3 r4 q9 Z9 c* t+ c& m // Note we update the heatspace in two phases: first run: i0 y- {8 s9 j) y: w( p* q; i( Q
// diffusion, then run "updateWorld" to actually enact the
, i1 ?: j/ U3 T // changes the heatbugs have made. The ordering here is
1 V: `( l5 y/ z \) ] // significant!2 w$ R, h) L9 k0 H) D# |$ f
' d) ?% S/ e4 m( D7 q5 j // Note also, that with the additional) m5 o/ L* @2 R I. B5 \' O
// `randomizeHeatbugUpdateOrder' Boolean flag we can
5 E# B0 e. \' X: @0 ^ // randomize the order in which the bugs actually run) @) Q( L7 | w7 ?
// their step rule. This has the effect of removing any
" B. s* \+ p5 Y // systematic bias in the iteration throught the heatbug
- H9 B# N' m* T; N // list from timestep to timestep9 g! F4 `2 h1 z6 `# R
6 z9 `9 b; ]& \% u$ T7 y2 m6 d! F
// By default, all `createActionForEach' modelActions have+ p' b- p( p& H/ Y
// a default order of `Sequential', which means that the ~: u& n6 H) g& K' \
// order of iteration through the `heatbugList' will be
1 j+ u. R# [9 n: L+ s- g // identical (assuming the list order is not changed; T: T# i! V2 F- L" P ?( V7 X+ g
// indirectly by some other process).
# [" s+ O8 W1 D7 I
" u7 b" W8 Z) Y/ M0 b& c- c modelActions = new ActionGroupImpl (getZone ());
- n7 W* |/ o8 y2 [( _+ T
8 f9 V3 i4 `7 H* b; p% Q, T) w+ U try {
" P4 O8 f0 j0 z modelActions.createActionTo$message7 l7 e' `1 m9 W- E
(heat, new Selector (heat.getClass (), "stepRule", false));
: P* r* S+ A8 a# ]8 m$ A } catch (Exception e) {
3 c4 c0 L4 ^) X% w System.err.println ("Exception stepRule: " + e.getMessage ());
# i4 n) }5 h% O6 ^: k* _/ r8 j9 u }
( K/ x4 M: g: I# a; R; Z
: } Q5 r7 f! P* U' m try {
7 u! j$ p1 e" x! h" R Heatbug proto = (Heatbug) heatbugList.get (0);
1 v2 t7 _; r: q- t7 p, i Selector sel = , C2 M+ `4 Y: j% Z2 C- f. W& q7 E
new Selector (proto.getClass (), "heatbugStep", false);( w% T$ H G4 U% j" z3 m, U0 }, W
actionForEach =$ B9 V4 \$ f* h, V8 W, B0 I" B4 m
modelActions.createFActionForEachHomogeneous$call
' j' w. {1 Y4 t' f (heatbugList,5 c3 @. y' t; `2 b) K9 @" j
new FCallImpl (this, proto, sel,; h f3 {$ W* y& A1 M
new FArgumentsImpl (this, sel)));8 Q! O/ P+ r9 x+ ?" o
} catch (Exception e) {
: m s8 x6 [( Y3 p5 E e.printStackTrace (System.err);, R) z6 b, k) L( [) }, {5 O6 [
} @: h2 ?' L: Y+ u& s: ^
' R" X! r+ e: M$ H' w syncUpdateOrder ();% T/ ~. G- g, P# I
6 B+ G& Q- Y1 q2 e. ~( O9 ~ |1 S
try {$ W: l. {( i" \8 r) i: F% Z
modelActions.createActionTo$message
' |* {: p( A" Z U, Z q (heat, new Selector (heat.getClass (), "updateLattice", false));
) U3 N; h/ R4 G( x) S7 e } catch (Exception e) {* Y1 f0 P/ ?# X$ b; a8 j
System.err.println("Exception updateLattice: " + e.getMessage ());
; n: U8 C; s; t* P }& I6 \# @. \* Y: }$ G; z5 S
0 i5 r" B1 {+ q5 S2 f5 _: y
// Then we create a schedule that executes the
% `0 q7 f# o( F // modelActions. modelActions is an ActionGroup, by itself it: r4 P% P" X5 S ?
// has no notion of time. In order to have it executed in0 F* ~- f- c* \% c5 L! i' e; ^
// time, we create a Schedule that says to use the% N& I! e4 u5 Y( @& [7 ~
// modelActions ActionGroup at particular times. This
+ R0 t R6 I- R1 P6 P // schedule has a repeat interval of 1, it will loop every6 y( x) r9 V) @, ~
// time step. The action is executed at time 0 relative to
! \8 I1 o! V7 T4 z" U( N* F7 O // the beginning of the loop.
% ^% x& x, u C+ T0 _2 ?! |
. r. t( R6 C# t; q A // This is a simple schedule, with only one action that is
. D0 l, ?/ G6 t+ h // just repeated every time. See jmousetrap for more. f/ A4 p2 F c+ y! Q
// complicated schedules.5 p1 G! y8 @" ]- p
% T1 r' g' H$ j( [, J
modelSchedule = new ScheduleImpl (getZone (), 1);; J2 k+ d! ~4 b/ O
modelSchedule.at$createAction (0, modelActions);
6 g F' ?( T0 `# y. F! A: Q 7 q- ]% E" e/ G" h v
return this;8 G6 w2 A- l9 d; N K" ~& |
} |