HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. Q3 ^) Z9 l+ j( \- ?( e1 v; T
$ H' d5 }( o0 c4 }5 U public Object buildActions () {
2 L( \7 J X6 D. s# z3 [ super.buildActions();
& n2 g! }( D U& W7 y2 S# T * w! p7 B1 i/ P5 r% f9 |: W
// Create the list of simulation actions. We put these in5 y0 ^0 Z M0 ~! X) N: `1 X
// an action group, because we want these actions to be
2 n" I% L: j# b // executed in a specific order, but these steps should
1 X0 Z" l1 y/ h$ n% V! } // take no (simulated) time. The M(foo) means "The message
2 k) Z: O8 H' v3 _/ {+ T( |# } // called <foo>". You can send a message To a particular x+ x$ I" q5 J. R; s* T
// object, or ForEach object in a collection.7 m/ B6 C& |0 Y" |
# c3 j$ t) g6 ^& {1 |- G) W
// Note we update the heatspace in two phases: first run
$ s& d7 f9 ?. A; W // diffusion, then run "updateWorld" to actually enact the
2 O8 C f, ~1 t' k, H // changes the heatbugs have made. The ordering here is( M1 W- V. L) L0 J0 \+ B n3 _
// significant!
1 _5 a: ?4 X1 S$ `# K0 D* y% a * H; q0 n3 e+ U( n- g% s$ }
// Note also, that with the additional
6 {% D- J' o- Q$ ]9 c% Y% K( {: `# U0 j // `randomizeHeatbugUpdateOrder' Boolean flag we can: h9 o6 T9 }! Y2 \
// randomize the order in which the bugs actually run
0 `& S6 U6 o! e0 p) k // their step rule. This has the effect of removing any
, t! M2 w% k8 I9 @& R) n9 J // systematic bias in the iteration throught the heatbug/ }9 M _$ {) \7 J$ q+ N5 s
// list from timestep to timestep
% n+ L9 u" r: J! z8 W- I( e ! R9 `% w# P: H' H* P9 N
// By default, all `createActionForEach' modelActions have
$ o M. }# n, c- A5 Y- z // a default order of `Sequential', which means that the
( H1 c4 f7 J4 P. c. L: j7 K8 R // order of iteration through the `heatbugList' will be
" b4 \; N, ~$ [( q8 w0 ?" _ // identical (assuming the list order is not changed2 t4 \4 x0 E' _# W1 `
// indirectly by some other process).
& k0 {& q) U4 j z- I0 r + B: L: \2 l1 q7 H" a
modelActions = new ActionGroupImpl (getZone ());/ J: _/ C! ]& N3 p6 f2 o3 f3 j, F! f
, G: E. Q7 X, I3 {
try {
2 K0 W' O& Z' \. y4 U0 C' x! _; W X7 L modelActions.createActionTo$message9 v' ]' ]) o9 R8 |' S( t
(heat, new Selector (heat.getClass (), "stepRule", false));
* }5 [8 K. w. R( P0 j" I } catch (Exception e) {( c# L- M( l0 h( `$ b
System.err.println ("Exception stepRule: " + e.getMessage ());
; x q m( J/ R, P/ p }. R2 W* _$ ?* N4 T5 T( I
, ^3 M$ @% K3 ~# | _3 c, A7 ^ try {
# U% r. z4 y6 v0 P- W Heatbug proto = (Heatbug) heatbugList.get (0);2 h# p$ k! E# K; \0 Y0 U
Selector sel = ; D7 U* E2 |& X* `0 J8 I: k: D4 ~
new Selector (proto.getClass (), "heatbugStep", false);0 U. E3 V2 T4 R9 @. ^5 i
actionForEach =
1 x9 ~9 t- Z0 ~8 L5 V1 b# C' d modelActions.createFActionForEachHomogeneous$call
6 d. ?0 a. J4 s* R (heatbugList,
% ]2 }5 R: L3 G new FCallImpl (this, proto, sel,
9 L# @4 y6 W5 ?1 x' j1 _& f new FArgumentsImpl (this, sel)));( k+ k" U. o O, [" {* b
} catch (Exception e) {
) @2 Q! a$ y+ F* ?7 H e.printStackTrace (System.err);
8 o& z" U! z* n, W5 M3 n }; P: f/ M/ i5 w* B1 O6 x9 i
! p" L/ D' {' z& I* @* d/ z* H syncUpdateOrder ();
1 ~. y6 a6 u6 R/ n
5 R5 u2 [6 Q& U! k( D o6 x' W" o try {
. [8 A' k( {2 e, ~4 @ modelActions.createActionTo$message , H* c S u6 O9 Y
(heat, new Selector (heat.getClass (), "updateLattice", false));4 [- T4 l) I3 |5 k) Q+ Y w7 j/ y
} catch (Exception e) {
( ~! z- d3 T# _ U3 Z System.err.println("Exception updateLattice: " + e.getMessage ());
5 f/ r( p% x5 a* R7 V: q: ?9 H }
; L. a; {7 O/ q* _2 ~0 P 6 ~$ j. D( O& o% B. X# }
// Then we create a schedule that executes the
* R/ ]/ Q/ K. `( m3 a( ] // modelActions. modelActions is an ActionGroup, by itself it
i$ N @7 }4 q- O5 ~% ? // has no notion of time. In order to have it executed in
0 b2 o( r. }7 {$ [ ?0 a- m // time, we create a Schedule that says to use the
3 k; j+ V0 S; l) ], I# c4 h/ J$ h // modelActions ActionGroup at particular times. This
& a5 I4 Z% ^. s! X& t8 z // schedule has a repeat interval of 1, it will loop every# A3 x# d; H z! [9 r* }- W: s/ v& W
// time step. The action is executed at time 0 relative to: }% p) b* a! x. i
// the beginning of the loop.
3 E5 [7 O9 }, B5 J
, q* R# [+ E* Y9 K% Q ^ // This is a simple schedule, with only one action that is: v. L) L+ i/ i* \4 s: g/ Y
// just repeated every time. See jmousetrap for more. h) ^0 Q' B$ U2 J j9 m3 U
// complicated schedules.0 X: t; k- h3 K* Y- U, K l
$ g+ @0 c% B+ R, ` modelSchedule = new ScheduleImpl (getZone (), 1);
+ N- m- w$ T9 C* ]0 x' o modelSchedule.at$createAction (0, modelActions);
* e h- Z/ A: L1 t
# }7 {- F# W8 o, b return this;
* |* ]- k0 W4 L5 \$ N } |