HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 `6 @, x7 @" P( |, E7 b5 ^" p0 ~/ z
public Object buildActions () {
. m# ~/ R& D3 h% E6 H+ R7 k H super.buildActions();
) s# g) X: L0 `2 g% D ]- I/ I
/ {. y0 o/ L2 h6 V+ I // Create the list of simulation actions. We put these in& ^5 c8 m6 K7 d2 g
// an action group, because we want these actions to be
% @; L: ~8 y; m" Y4 n/ n8 h- z% }5 U // executed in a specific order, but these steps should. D- |. w* z& H% x; [2 [
// take no (simulated) time. The M(foo) means "The message
0 t3 K! U' s/ G6 n% J' }* t! g // called <foo>". You can send a message To a particular
& l0 a7 E6 F/ V6 a* } // object, or ForEach object in a collection.8 @# F; c$ _, j
) B$ T, g3 \8 M* Q- Z* e // Note we update the heatspace in two phases: first run
/ H! x4 c( X3 Z2 S5 C7 D6 z# Z) T% o* i // diffusion, then run "updateWorld" to actually enact the
0 L8 q! [" X2 @& s" i // changes the heatbugs have made. The ordering here is
. d& I2 H: j. a ^* {# n // significant! D6 h) z" Y0 m$ H, J' H) b* g. ~
% b) C0 ?% |3 Z4 a- o) @3 `# g7 [& D // Note also, that with the additional
% t; u+ l& t) h1 `8 e! k // `randomizeHeatbugUpdateOrder' Boolean flag we can
7 E3 L; l: t# C# @+ |$ { // randomize the order in which the bugs actually run
( c0 S% s6 W. X' |9 A4 Z // their step rule. This has the effect of removing any3 ~: r5 o+ F5 U% o, d
// systematic bias in the iteration throught the heatbug
+ _: i- o" s% d; r // list from timestep to timestep, V: [- z% E. ?
7 X& |8 [& K! s // By default, all `createActionForEach' modelActions have9 O1 k- }% y) R6 @
// a default order of `Sequential', which means that the
6 G$ F }4 F% L& g // order of iteration through the `heatbugList' will be
+ b- c( f) x* {6 F+ z I // identical (assuming the list order is not changed2 P5 L' m- n" |' d
// indirectly by some other process).
& O9 n5 J/ Z5 }+ s% t: t6 Y, [ 4 u+ s" G `. B8 B, k: G
modelActions = new ActionGroupImpl (getZone ());5 v0 O, T u; J, G, j* d9 D9 |
1 W0 |! N% q* K: p: O1 b3 K) c3 |9 Z
try {
3 F% i9 \/ ?9 `9 w7 e modelActions.createActionTo$message7 |4 v$ [9 l& s4 V1 n$ g9 \2 h- u
(heat, new Selector (heat.getClass (), "stepRule", false));
, ]% h. K1 e; m0 t } catch (Exception e) {
* }4 x) n4 R3 N! i: R0 S System.err.println ("Exception stepRule: " + e.getMessage ());
( Z$ d6 b* p! ` }/ w/ w# I' J+ F8 R
& V6 h" W/ U8 _" u1 T8 r- N
try {
$ F4 g* @0 j) k& ?# j, S Heatbug proto = (Heatbug) heatbugList.get (0);6 q2 G9 p) Z" @1 p
Selector sel =
' ?7 Y! i6 y( Z l: D new Selector (proto.getClass (), "heatbugStep", false);' h: ^+ m3 k! U& Y/ K7 V, ]+ {
actionForEach =
4 e! \! p7 d: R# y modelActions.createFActionForEachHomogeneous$call
+ f- h7 S; s6 u (heatbugList,0 j U' n; i4 x3 _+ p' Z) H% E
new FCallImpl (this, proto, sel,
: i" n9 T0 t: S: M" l6 N* O9 B1 w) S: r new FArgumentsImpl (this, sel)));1 o- X" {' \3 \8 l$ i: U+ U0 N1 l
} catch (Exception e) {$ @! y: y1 T& d8 U {5 J+ L
e.printStackTrace (System.err);
( p$ Z7 L8 i. r; E% K4 s, B9 P3 @ }7 N7 S# n0 @, h9 I* V
, b* P: D0 R! ?' G2 S) X( a( \ syncUpdateOrder ();
% ~9 h! ?) g ?. d, F# W5 W# T
2 O; j' j* e6 x( @ try {" q8 M [2 h7 ]9 h3 b: d
modelActions.createActionTo$message 5 c4 C. k' b6 k9 p; S, K) G- t
(heat, new Selector (heat.getClass (), "updateLattice", false));, c2 W, B; x/ @; U& \
} catch (Exception e) {
4 c2 L2 [3 P3 r; F7 C& W/ k System.err.println("Exception updateLattice: " + e.getMessage ());
4 j8 S7 S& n% O" ` }& ^9 ], u. ?8 w1 w+ Y* e/ u/ U% l
6 }# U8 H- K. V" D) u
// Then we create a schedule that executes the
0 R) E9 Z; D, T8 f+ ~7 k' w( l2 ~3 o // modelActions. modelActions is an ActionGroup, by itself it
[/ k7 W0 p6 t, E8 { // has no notion of time. In order to have it executed in5 T0 c1 W% i; }, W1 X( V2 _/ \. t
// time, we create a Schedule that says to use the
0 x2 g0 c2 ~2 v7 y // modelActions ActionGroup at particular times. This
. @0 j+ s* s: u& r$ j1 a* v* b // schedule has a repeat interval of 1, it will loop every/ L6 B0 f0 q$ w
// time step. The action is executed at time 0 relative to" |) w' D- |8 {
// the beginning of the loop.! Y6 `8 d* ^5 _) ^
) `& V- Y H& Z // This is a simple schedule, with only one action that is# y+ l' ]- L/ u1 I2 H- W
// just repeated every time. See jmousetrap for more
$ p V! R8 @& l7 ^ // complicated schedules.
, S5 J+ w. C8 f3 z4 x2 c B
# w6 G3 H2 o8 j( Y modelSchedule = new ScheduleImpl (getZone (), 1);
?5 d- Y/ ~6 `6 z. A, \9 B modelSchedule.at$createAction (0, modelActions);
/ K q( f2 m3 U* P% z4 E
$ C' k3 f+ b( c/ p/ x0 {$ I" J9 U return this;
2 A" q/ S* v' F& i } |