HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% Z% x1 B+ B4 n
2 n1 N; G) r* g% n9 b' f6 w public Object buildActions () {
$ A9 y) W' Q( |; O- c super.buildActions();
/ j' `( n7 m F O" C( K) M. t; o
3 e) x l9 ~: p4 G7 B" l // Create the list of simulation actions. We put these in
/ F* i7 [( x H& F' S // an action group, because we want these actions to be$ [% x; e7 e9 V7 y
// executed in a specific order, but these steps should
, i) u0 {0 X0 V9 | // take no (simulated) time. The M(foo) means "The message* l+ V# U* q2 t
// called <foo>". You can send a message To a particular% ]' |/ Z4 s. r! b8 }; D% N
// object, or ForEach object in a collection.
0 ^. \: X% z- `8 B8 G% y4 b' D4 ~0 | B
5 a5 ]5 A4 a- q( \" X" J; O // Note we update the heatspace in two phases: first run
# k- c$ q7 r/ B& L // diffusion, then run "updateWorld" to actually enact the
$ \/ P- U' r6 u# b) i; j6 G // changes the heatbugs have made. The ordering here is' J: i3 ?4 q% X& L: v7 x1 {
// significant!
2 H# J" l1 n4 U( G: p/ N1 F
9 m" X h1 q3 g$ [( `, F( u) }" H // Note also, that with the additional
B$ ?6 ?: ?5 }$ v // `randomizeHeatbugUpdateOrder' Boolean flag we can
) o7 s4 Q z. @! q( e1 V // randomize the order in which the bugs actually run
. n1 E% c3 ]$ Q: k I3 U! R: d( L // their step rule. This has the effect of removing any. N+ Y2 u. {. w* }. O5 m$ K
// systematic bias in the iteration throught the heatbug+ m+ F, e1 C4 T, J3 g4 l
// list from timestep to timestep
! v8 V; h! p3 L
0 |: F$ O* P8 B9 i2 f: T // By default, all `createActionForEach' modelActions have
2 S9 s3 s' F1 T. p // a default order of `Sequential', which means that the
2 k8 h/ V4 K. B* L- S- A/ I; Y7 o- g; T // order of iteration through the `heatbugList' will be
7 G: I: t% Q4 F- P& k! e0 u- ^ // identical (assuming the list order is not changed
" J1 l6 }7 i( q6 K. M0 O. C5 m // indirectly by some other process).6 U v0 m% q) \' F9 v$ G9 H
7 V/ z% d* I1 w) R9 r* h5 v( F modelActions = new ActionGroupImpl (getZone ());/ ], V) V% N8 U8 X a
8 \ i( w+ ?4 E; a try {
* V2 m3 T6 m1 K; x/ M V. P) E" l/ A modelActions.createActionTo$message
* l% d5 I7 o- J: X8 o, y (heat, new Selector (heat.getClass (), "stepRule", false));. y6 h# [. ?: b$ F. E
} catch (Exception e) {
6 _* V: _: i1 e" i0 a+ g, [ System.err.println ("Exception stepRule: " + e.getMessage ());( f. B! U+ Q8 \( }: L
}
. Q) o$ ]8 o" P
' u9 g" |/ s4 c* E3 A7 u$ h+ l try {2 h* S5 e2 \0 z5 G& Q5 g/ f
Heatbug proto = (Heatbug) heatbugList.get (0);: `# ]8 q2 X2 O8 C1 e
Selector sel =
% ]" G6 p6 D7 ] new Selector (proto.getClass (), "heatbugStep", false);4 s" F" }& g$ U3 B
actionForEach =- l* p/ [) P" F
modelActions.createFActionForEachHomogeneous$call
6 f8 k2 H$ g: `1 R (heatbugList,
- E% S/ w9 U. ]. j" C new FCallImpl (this, proto, sel,% G- }0 G6 h: [
new FArgumentsImpl (this, sel)));5 \2 @* A& o% O* ~/ H- a
} catch (Exception e) {$ b! `2 U: Y3 G/ L7 Z/ G
e.printStackTrace (System.err);
/ P' w% E+ [: o% J1 s }
# U2 b. k8 {) \! y 5 V( s2 ~+ W3 S
syncUpdateOrder ();
* x4 d7 z ?3 Q1 I% ]
4 K+ b' T c" x& A! \0 L try {
; t3 e: y, g e3 r [" K modelActions.createActionTo$message 5 Q9 n1 l& _( |# r# f) m
(heat, new Selector (heat.getClass (), "updateLattice", false));
( I* v3 ]8 n. g" c% ]6 F } catch (Exception e) {2 b1 z' m! E( m8 j) U
System.err.println("Exception updateLattice: " + e.getMessage ());
4 L, I9 w K |9 D: E/ m- V z; d( z }
2 i' x1 l0 X) p* s/ P. I+ y 8 b1 h, C# Q U; {5 G2 x! I
// Then we create a schedule that executes the
( m7 m+ |+ l6 c @6 l // modelActions. modelActions is an ActionGroup, by itself it
2 s6 {$ U. `7 w9 g. U- ^ // has no notion of time. In order to have it executed in7 U5 ?. g! \% j: a% K1 m
// time, we create a Schedule that says to use the; y9 b6 D, F# z. G4 y% k: [
// modelActions ActionGroup at particular times. This
& u( K/ u: D% q6 Y8 B. p // schedule has a repeat interval of 1, it will loop every. A, X* ^* q8 z' e# M- f/ E6 `
// time step. The action is executed at time 0 relative to
# G9 e V: o0 h' F, B5 m // the beginning of the loop.; Y5 ~9 k0 O. l# j4 M/ Z1 r
4 J v& J+ d) X+ q
// This is a simple schedule, with only one action that is5 q: Q7 M* `/ X1 V C& e/ @7 ? j% P
// just repeated every time. See jmousetrap for more9 J* Y [+ }3 v, L# N9 R% o3 s6 m
// complicated schedules.% M, S. E0 y4 k3 \ F
. p# R. n$ }' J4 w: F modelSchedule = new ScheduleImpl (getZone (), 1);
* S% Z5 [0 J1 ?9 N; m1 X modelSchedule.at$createAction (0, modelActions);' \* B! D; Y( C0 f Y! _) M- k$ s& @
/ ~8 B2 o/ V7 [# o' s* g g/ ? return this;
7 A' o* H- [4 B- I( x- n2 k% } } |