HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 I9 E! T4 T$ w) o% W% z" e( A7 e& B! }: Q" q
public Object buildActions () {/ l9 a: Y8 b" b
super.buildActions();
, y2 y" z8 P. n* o9 w6 B
' i2 v/ f" j r4 U8 V // Create the list of simulation actions. We put these in
& X0 P% \4 w8 i5 a9 E) e // an action group, because we want these actions to be# ]! E! d' i" _" p4 d
// executed in a specific order, but these steps should
* H/ b& x- |/ i a // take no (simulated) time. The M(foo) means "The message0 V* y: ~- t3 w1 u9 d& }; Q/ ^
// called <foo>". You can send a message To a particular
6 m7 p( l, [. {2 h // object, or ForEach object in a collection.
+ L, x1 [" E2 n/ ^
9 I, i3 d5 t# j# O. f // Note we update the heatspace in two phases: first run
. W4 ]& n9 g% \9 M0 P2 H // diffusion, then run "updateWorld" to actually enact the1 U9 M# E8 B% L5 y* b
// changes the heatbugs have made. The ordering here is
0 v* W) r: @; Q6 B4 c // significant!
+ Y: ^/ E ?) |, S# b
8 F& {: J9 G& o // Note also, that with the additional6 v" [& i" \6 R$ p# h" s
// `randomizeHeatbugUpdateOrder' Boolean flag we can0 q) u% @+ O# K# v- S9 Q
// randomize the order in which the bugs actually run
; j( x/ b) H' L // their step rule. This has the effect of removing any D2 H2 w5 n0 V
// systematic bias in the iteration throught the heatbug
7 G% G' y4 T) g5 n5 Z3 H6 v // list from timestep to timestep
7 \" @3 Y, J+ R7 s7 @ : _) E! n" h! p8 H/ g( e- |" A
// By default, all `createActionForEach' modelActions have
. Z$ t$ X6 G3 S1 o8 X, W; u B. N // a default order of `Sequential', which means that the2 S! V; s; I4 ]: K4 m
// order of iteration through the `heatbugList' will be
, ^4 e! h5 T# v6 t9 t& ]% } // identical (assuming the list order is not changed3 c0 s7 V. V+ d8 e, ~. N
// indirectly by some other process).
& i4 i: ^1 S# n7 W0 P8 |; {0 \4 c
* \* i" |+ l% ?4 T modelActions = new ActionGroupImpl (getZone ());; ~4 L6 ^, G: U8 U
) P) B, O( f5 L: _ C1 A5 f9 i
try {
& z9 I" F5 w, S5 e modelActions.createActionTo$message
! H- e3 e& N: E! u2 c (heat, new Selector (heat.getClass (), "stepRule", false));
s/ g& R- E: E8 ?- P' { } catch (Exception e) {
9 f k9 X. T& T9 k2 N$ m k System.err.println ("Exception stepRule: " + e.getMessage ());
0 p* z3 l9 P/ ?2 u5 ^" P }
* m, ]% R0 ^6 a; W! R# k ? ]: b, [; ]' O8 l3 p
try {# A2 }& J0 x- B. s
Heatbug proto = (Heatbug) heatbugList.get (0);
" y. Z. g+ B% k0 i Selector sel = 1 A0 S8 |+ L' x; f8 Q" e8 {7 ?
new Selector (proto.getClass (), "heatbugStep", false);
7 Q7 C$ W/ k( z, V a# R* c' @7 r actionForEach =4 ]5 C; c+ E/ U) P; `
modelActions.createFActionForEachHomogeneous$call
: Z- w8 F7 K6 X$ V: _" [& _5 x (heatbugList,
; U. k" h3 x4 J4 U2 N$ U new FCallImpl (this, proto, sel,5 h$ ` P8 H- y% {4 }" x
new FArgumentsImpl (this, sel)));7 t; x# `$ E' b! B4 |
} catch (Exception e) {
' c) D+ O) h$ `9 \2 _6 N e.printStackTrace (System.err);+ |/ M/ U" b7 G3 O7 ~- p
}% s" `* ]- b+ ~# \6 @
( h3 N5 ]8 M6 E6 G0 I
syncUpdateOrder ();
& B7 b% G. M8 C: S- l9 n% k% [* q, @5 p V9 Y2 f
try {
* f9 a1 Y3 N/ v9 A$ i modelActions.createActionTo$message 5 U. I9 Z9 N, m
(heat, new Selector (heat.getClass (), "updateLattice", false));
: ?' E+ k+ Y: M1 ?" G4 j/ o } catch (Exception e) {
$ w( l8 a7 X' l6 U% }5 B0 F& f3 @ System.err.println("Exception updateLattice: " + e.getMessage ());
0 [5 i c2 ?+ N: c( v }
1 U& c" d+ c% C% A . L( Q% H5 [/ ~* _- T
// Then we create a schedule that executes the6 Z3 |% Z# U% g" D3 @# Z% u
// modelActions. modelActions is an ActionGroup, by itself it) _; q5 _- v, q0 Q* q2 w+ g
// has no notion of time. In order to have it executed in
+ I7 }( E* m; E2 f. ~" K // time, we create a Schedule that says to use the
) J( |' }2 l, X // modelActions ActionGroup at particular times. This
3 T2 S9 T/ D+ g // schedule has a repeat interval of 1, it will loop every' j* `0 d* y9 |8 s8 N( i
// time step. The action is executed at time 0 relative to6 i' s) L; G. j! r: J( x1 J1 @7 p7 c6 a
// the beginning of the loop.
, B$ |6 }9 F8 A
) E; }' O: }$ }3 Y // This is a simple schedule, with only one action that is
5 V: D9 c5 B! @; \( S# J // just repeated every time. See jmousetrap for more
8 v9 X8 L6 W2 @! H! c4 G* }) [/ U // complicated schedules.
( H1 ]: |+ N( o0 t, w
7 K6 n3 `* w1 o/ y# e/ ^ modelSchedule = new ScheduleImpl (getZone (), 1);) B* B6 R& f# E
modelSchedule.at$createAction (0, modelActions);
4 b' g7 [/ t' i; a; v9 |% w
" f4 s- s1 O# Q: X# _' r return this;% f0 [3 L4 @; K+ E
} |