HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
" b% V: `/ F, y
2 a- P% P2 p6 X1 ?/ l$ ~3 D* m public Object buildActions () {
1 {, k! x' w& [# K; D super.buildActions();: p8 K9 P* t1 `) s, ^6 J$ I! x
4 t5 k4 F$ w" O% n+ f // Create the list of simulation actions. We put these in! s8 c' L; [- i' d$ W! }
// an action group, because we want these actions to be. a' v3 D& \! P- }9 E* m2 B( n3 _
// executed in a specific order, but these steps should
3 h/ i8 t* x( M" J // take no (simulated) time. The M(foo) means "The message* n9 V2 Z% A5 o; G7 S0 p
// called <foo>". You can send a message To a particular8 P2 v& M8 s7 c" j8 F9 g3 ?) a5 c9 I9 v
// object, or ForEach object in a collection.+ `" Q% a+ E* V
! _/ S" Q" G' n // Note we update the heatspace in two phases: first run
/ ^2 L% B! k9 J! b) E // diffusion, then run "updateWorld" to actually enact the
' |1 Z7 z& r5 U! U* ?% ^ // changes the heatbugs have made. The ordering here is" y" C7 M& x' @) y+ ^) X& L
// significant!
g9 S6 r1 F7 z. [8 O# ^* }4 h
1 R2 t0 W! M$ v: A# x$ o // Note also, that with the additional. Q' Z3 ~9 U$ x8 J5 M
// `randomizeHeatbugUpdateOrder' Boolean flag we can
; C9 s+ n) L9 `. u" o, C& F- ` // randomize the order in which the bugs actually run
$ T3 B p7 X$ g( l- z // their step rule. This has the effect of removing any" c; H4 M7 d4 @9 I
// systematic bias in the iteration throught the heatbug
: p( J. ~+ ~0 [9 t // list from timestep to timestep, S; x( X0 k5 r2 J3 a
$ H# d; q: {- O- v
// By default, all `createActionForEach' modelActions have
% X% d! F) \% F4 K // a default order of `Sequential', which means that the2 U4 ?7 q# a& S- h9 \
// order of iteration through the `heatbugList' will be8 ]- N; y/ R1 Q5 g$ q; i
// identical (assuming the list order is not changed8 \4 ^7 Z* E V( I4 S8 y
// indirectly by some other process).
7 _! p8 i2 Q3 j4 n$ f 8 s. C- [# _, U" R6 a! x1 N
modelActions = new ActionGroupImpl (getZone ());
9 c8 [! n3 k; Z, k" u, r
6 r2 \0 N! T) M try {0 H7 B6 M1 l$ o0 A' c7 H
modelActions.createActionTo$message
- I3 O' X+ [4 h6 x6 E (heat, new Selector (heat.getClass (), "stepRule", false));) h8 J* \: \! \% q4 f5 O
} catch (Exception e) {
1 `# m5 s' z# v: O Z$ ` System.err.println ("Exception stepRule: " + e.getMessage ());( A4 }+ Q* N H! o
}
8 q4 [; x6 Q% y M
: l- A5 O# A$ m3 s3 d try {) M! ?5 m0 f' U. f6 G6 C; s
Heatbug proto = (Heatbug) heatbugList.get (0);2 H7 N) g, k0 B8 c5 Z( H: |
Selector sel = 0 O" `0 ?) @9 b1 {2 H6 c4 U7 B
new Selector (proto.getClass (), "heatbugStep", false);1 h1 e$ S9 d, L- U; ^$ w
actionForEach =
* A0 s0 w+ s% M modelActions.createFActionForEachHomogeneous$call
% J4 ]0 i _$ x9 y. I: C+ u; Q% G (heatbugList,
# @) X7 b% E( A: y8 ~: { new FCallImpl (this, proto, sel,
* H1 b; o. H. L2 N c7 X$ \ new FArgumentsImpl (this, sel)));7 m6 Y$ l, k- b- @: P. x% u! H
} catch (Exception e) {2 E; H, B+ q* }
e.printStackTrace (System.err);( F. D+ U* p9 @; z/ o
}5 a8 M; g+ A& E. S, r" n3 Y+ z
8 v9 e/ S5 ]9 {' y. T* b; x
syncUpdateOrder ();2 ?) } I" F& q
8 D. {0 c& y! j
try {
+ ?8 ] i6 `+ k$ }" \- Q modelActions.createActionTo$message : V' e" r. n+ F) r
(heat, new Selector (heat.getClass (), "updateLattice", false));- I8 X0 L& b0 d" A
} catch (Exception e) {
' |2 g+ r$ ^0 r System.err.println("Exception updateLattice: " + e.getMessage ());
5 r6 k+ p" Q+ j7 [- T) P; F8 P$ P }' l3 G, ~2 W. N1 M" L: ~
1 }: u5 d2 X- X2 g, A. }. X
// Then we create a schedule that executes the# c( x: l: p; ~) W0 b
// modelActions. modelActions is an ActionGroup, by itself it
! ]% s1 c1 x( l, g0 A% a J // has no notion of time. In order to have it executed in' B6 y* R/ K5 W- w
// time, we create a Schedule that says to use the v5 @2 O7 A% x( I. L) I9 c
// modelActions ActionGroup at particular times. This/ h; g+ c8 q$ p8 l- y: o& i
// schedule has a repeat interval of 1, it will loop every7 U4 K7 g! F8 O2 U9 t
// time step. The action is executed at time 0 relative to# `# y9 t n6 M- U4 P) v
// the beginning of the loop.
: Y. x) d' ^# \( G0 X" [) T' K' `9 {/ J* g5 ~% R. U! Z2 i3 ^
// This is a simple schedule, with only one action that is* l0 o) w" p9 z% ^7 P
// just repeated every time. See jmousetrap for more
c; g* }! s3 |2 [" {8 p" [ // complicated schedules.
% L s0 T; U+ B) U) W0 O+ O' u
4 ~ v) J& X; F modelSchedule = new ScheduleImpl (getZone (), 1);
+ h+ n) N2 L6 n% n8 [) k modelSchedule.at$createAction (0, modelActions);
; z0 `( N1 P5 J, E& m' C $ Y7 q8 b! G! y" e5 D8 S
return this;
8 {1 z0 d0 N( I2 k! `5 [- Z } |