HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 W& c3 { X& e
, H. ~9 n9 P/ ]+ ~
public Object buildActions () {
; u$ X, ~7 G" G8 N5 o super.buildActions();
+ l- x6 `. ^4 ^* g/ W& E+ [8 h/ q ( [1 G; T" N7 t$ Z" w! b$ y
// Create the list of simulation actions. We put these in
) J3 n |8 q& E // an action group, because we want these actions to be. V* r1 }! P5 n1 |- M% ?/ x
// executed in a specific order, but these steps should8 B' R9 G8 m, A6 P0 e
// take no (simulated) time. The M(foo) means "The message! B& n3 P K3 g6 a4 k: x
// called <foo>". You can send a message To a particular
( q( g: E7 V* P, P; Q // object, or ForEach object in a collection.+ v4 ?7 G* x* j |9 X+ C
- t9 k! {* g# S* J4 e // Note we update the heatspace in two phases: first run
+ m) p! ]/ M6 v. Q5 A" n' t3 C- X // diffusion, then run "updateWorld" to actually enact the
$ R: v9 [7 ^& | // changes the heatbugs have made. The ordering here is: x" q+ p# D- R+ x4 C% {# O# \
// significant!" Z8 O8 E6 D! K. Q8 a+ S5 q: N
& U% ?7 M5 p5 P // Note also, that with the additional8 r t' y: i8 P5 O. u# @2 }" j
// `randomizeHeatbugUpdateOrder' Boolean flag we can- @# U W4 c9 _7 _8 [0 Y) x3 x3 Q
// randomize the order in which the bugs actually run
1 I9 G8 m W4 r( u# f4 N& e m( d) z // their step rule. This has the effect of removing any6 Q4 e, \: V* x# d4 i4 N& R4 J
// systematic bias in the iteration throught the heatbug
$ j6 W! K" D8 _0 J. l8 N( M // list from timestep to timestep
4 W0 Y' }# K. e7 u9 P$ g- I6 ?
0 B# y) X4 v! q1 D* n // By default, all `createActionForEach' modelActions have
1 H* m" S6 I5 k C" y" O0 l; Z$ P // a default order of `Sequential', which means that the
* G: _) } c0 l2 n& T P \' \ // order of iteration through the `heatbugList' will be
1 V$ f! p2 X" j `% ` // identical (assuming the list order is not changed2 ]& y N. Q; r
// indirectly by some other process).
/ _9 @8 p( A# f4 M2 p
! U0 M; |2 o0 c/ B) `- `, P+ Q modelActions = new ActionGroupImpl (getZone ());
: R8 y8 T) {5 l+ }9 w: a
' y. X0 b) T2 {, @5 Z. i try {8 D) B' w9 F! P& m3 t0 [* \
modelActions.createActionTo$message
! M8 |, _8 N6 ? (heat, new Selector (heat.getClass (), "stepRule", false));5 m+ V7 z7 Q1 z& p l- z/ U
} catch (Exception e) {% R8 }' R" G% {$ X, g, f, M
System.err.println ("Exception stepRule: " + e.getMessage ());
! d" K7 V" k+ N }- W8 |2 z; s4 \5 a0 [; Y; T9 C' k
3 l) e9 Q# V* ~
try {* s; M6 H# ]7 J
Heatbug proto = (Heatbug) heatbugList.get (0);6 C7 ~. K8 E6 H# q5 x
Selector sel = 8 g7 x$ P% p! f
new Selector (proto.getClass (), "heatbugStep", false);
# N* D3 L& L6 N actionForEach =
|9 }" O2 m C6 w# g. M- u1 n6 `' z modelActions.createFActionForEachHomogeneous$call
m, {5 L; Z+ q/ C% R (heatbugList,
2 ]* Z% n3 P( I5 I new FCallImpl (this, proto, sel,! g h" b7 V) S. l5 q' U/ P
new FArgumentsImpl (this, sel)));; Z' D4 a( L8 |: k3 R+ S6 G; u, x
} catch (Exception e) {
* f( \8 g% D/ ?6 h- ` e.printStackTrace (System.err);& D5 C. \ x# k1 a5 N* m8 z
}0 R* a- O% F! O; H
/ a5 Y8 K, Y9 ?
syncUpdateOrder ();3 j/ c+ m" S- A
7 W0 ~- R& A/ y) f& `$ A
try {; c" K6 I9 ^4 J0 d. p6 E
modelActions.createActionTo$message $ y' `! A; |) N- _& z# z8 S
(heat, new Selector (heat.getClass (), "updateLattice", false));# i' P! v( f& Y5 X7 e
} catch (Exception e) {8 p7 {9 u% L; I
System.err.println("Exception updateLattice: " + e.getMessage ());; i0 k: }% V" H% x+ X3 }! d- i" D- [$ q
}
' m. B: a) `: m' u6 g* q
- {+ \% u( h6 B5 K5 ^ // Then we create a schedule that executes the3 x9 b3 Q+ X3 G$ g
// modelActions. modelActions is an ActionGroup, by itself it
# Y$ C) I2 `* r" @3 F) ?: `4 \' u5 v // has no notion of time. In order to have it executed in
7 h( j0 C1 g4 Z9 J. i // time, we create a Schedule that says to use the
# D( o& [6 Z3 A+ V // modelActions ActionGroup at particular times. This6 q) V! ?; M4 ~6 h; E6 G
// schedule has a repeat interval of 1, it will loop every
' d* ^ Z! R2 Q4 e // time step. The action is executed at time 0 relative to! a! n# w& G4 p- Y/ X
// the beginning of the loop.# a9 @. J- L+ M" S; A# p
( D) e: T$ q; \ // This is a simple schedule, with only one action that is q) s5 |" d! p6 f6 ?1 S: z+ K$ G
// just repeated every time. See jmousetrap for more! J$ b, p/ h- S
// complicated schedules.' p9 ~7 m2 |: V7 P! H
3 M# C, m9 E: c: B3 \ modelSchedule = new ScheduleImpl (getZone (), 1);
" w8 F" f$ v3 q5 K4 t2 f0 u% m modelSchedule.at$createAction (0, modelActions);5 g, d( I2 U" u$ f0 }
. l7 `/ R6 k; F/ n6 N, D return this;
D7 H( M6 _6 l0 I& X( ^" @ } |