HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" _6 A: C- Q6 S; ^1 ^( |
( y+ b0 J. w6 x; L& ^' F
public Object buildActions () {8 Z7 L& Q2 i8 D! q) J8 Y' t# D
super.buildActions();9 u' o& n d) w$ [. F2 h
5 G4 H S& @4 o! \. t0 N4 y // Create the list of simulation actions. We put these in
; y0 C1 ?* e1 s& d // an action group, because we want these actions to be
# ?" ?! ~2 D% }9 @6 p" b // executed in a specific order, but these steps should
7 C, U0 m5 [' Q8 ^2 c& L2 r4 \; G. [ // take no (simulated) time. The M(foo) means "The message
2 T, p5 ?1 q5 `( n0 T/ f6 j* B3 x/ k // called <foo>". You can send a message To a particular
3 m7 d: i9 {; G, [0 E \ // object, or ForEach object in a collection.8 i- q+ e* R, \' H1 D" }! u9 [
4 K4 }1 E( D+ G- p+ r
// Note we update the heatspace in two phases: first run- ]" N/ V4 f* ]0 f# s6 ?. q' M
// diffusion, then run "updateWorld" to actually enact the
" u8 M3 R4 \0 K2 f% x( I // changes the heatbugs have made. The ordering here is/ X& W) Z0 ?% `+ x
// significant!
' H3 W. E& R( h: Z! z' ~6 o ; h, }5 t, l; Y- I! e
// Note also, that with the additional" Y- I% r! V( N9 W
// `randomizeHeatbugUpdateOrder' Boolean flag we can
' X* w' z7 i+ S. E- ` // randomize the order in which the bugs actually run7 v5 `$ d; C" ?+ I/ i- f) w3 l3 O, i
// their step rule. This has the effect of removing any1 F' G6 E3 i' ~3 I& S# P
// systematic bias in the iteration throught the heatbug
: e! m& h$ l& \4 o# Z // list from timestep to timestep% T- \# p2 F. B
: w7 e+ M" W/ w" A
// By default, all `createActionForEach' modelActions have
5 o% X; {6 R. p/ A" J // a default order of `Sequential', which means that the
+ \( [, o& R/ a& u) Q/ I8 Z // order of iteration through the `heatbugList' will be4 Q% r5 j/ c2 ?
// identical (assuming the list order is not changed' L8 z& j! U9 E: X6 c0 q
// indirectly by some other process).
3 ~% f' Q0 w- c5 d
- B! z6 T& Z K$ b+ h* P; L) f modelActions = new ActionGroupImpl (getZone ());# z- j( b% g( e5 Z' G7 `
\ C# y4 `& V$ y! B try {/ d6 l- |) Q" ^6 P) v0 K2 K' Q+ w
modelActions.createActionTo$message- @. g7 [# G# E
(heat, new Selector (heat.getClass (), "stepRule", false));
! T* d; p% z G } catch (Exception e) {" p- e1 ` c" m$ J. C# u: s
System.err.println ("Exception stepRule: " + e.getMessage ());
' Y( b7 o: o5 o7 v2 Z) y }
, U R4 m+ l2 h" X- B0 T+ z" P# S, X. L' X# c7 y7 O4 ~
try {/ d) [! N; o3 ~4 \2 c
Heatbug proto = (Heatbug) heatbugList.get (0);
2 X! Z% ]2 G$ @$ N& E' |% d Selector sel =
; ^& b/ `# _- H8 W new Selector (proto.getClass (), "heatbugStep", false);
, G9 q7 r# x% o9 t actionForEach =
- h- j) c. V3 A6 C3 E2 A" ] modelActions.createFActionForEachHomogeneous$call+ j) L* p7 I* d1 N- z
(heatbugList,& I+ P1 g. s- G
new FCallImpl (this, proto, sel,
" n% U8 d8 t; L" O R4 z* q new FArgumentsImpl (this, sel)));4 [- v. W! f' ?) k1 w
} catch (Exception e) {
I; D# s! N& B1 E: \ e.printStackTrace (System.err);
. @7 ^* @% T3 b2 g. N/ R }
* o+ a# h) F& W' x$ o9 L; x! }7 l
. k% H" h; O( M$ A( z syncUpdateOrder ();
4 j2 h* }8 h9 o' k" c8 j- r
4 j9 H% X) l, K" n, k0 ~8 B1 |% B try {
& u$ R4 |& C( _1 c' y. ]0 c modelActions.createActionTo$message
- W. `- \+ }8 X* P. I+ b1 R (heat, new Selector (heat.getClass (), "updateLattice", false));. h, V' h- I @
} catch (Exception e) {
$ Z ~4 m: C- o System.err.println("Exception updateLattice: " + e.getMessage ());7 p6 i* |$ x+ E) \8 W# u! \
}
x8 g% y4 R7 Q8 ~3 |4 S. ~, u! s1 d
/ H3 E2 [+ M( M // Then we create a schedule that executes the
" y: {3 Y& Z$ n- S // modelActions. modelActions is an ActionGroup, by itself it' V" M% Q- o" B( v7 x1 L2 E
// has no notion of time. In order to have it executed in
( v7 o. v1 _8 P // time, we create a Schedule that says to use the
: o/ H! F4 w- o9 l- [! I$ @ // modelActions ActionGroup at particular times. This! V3 g: }. o* M
// schedule has a repeat interval of 1, it will loop every
6 L% N: D: F& _1 q: S, |, j. Y // time step. The action is executed at time 0 relative to
7 q/ h% e# {0 p. Z- [+ E; {, _2 f n8 i // the beginning of the loop., Z9 _) U/ b3 N# `; F: W
. t% F ]* P2 ~) y' M+ g // This is a simple schedule, with only one action that is
$ b6 \* V2 V! ^! b2 S6 p6 T, X // just repeated every time. See jmousetrap for more8 E y; N" I1 d3 P' T4 g" Y
// complicated schedules.' X/ ]" a$ |, O
# k- k- w/ N M4 } modelSchedule = new ScheduleImpl (getZone (), 1);
2 Q9 h) `* q0 l1 z1 k2 d modelSchedule.at$createAction (0, modelActions);' j6 Z: A3 Z. S O9 {. Z1 g! F
! d& U4 R1 z4 E$ s4 B9 ?% n5 D
return this;
; X$ j, [+ s" E, m* A7 p( O } |