HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ B9 m. p. Y$ \$ g+ U. `* M- K
6 \9 K8 {: Y% L, K public Object buildActions () {) A/ z& |& y' A& u9 h
super.buildActions();& K o* G; m. N- D
7 F# k \* X8 \* l/ ^ // Create the list of simulation actions. We put these in
/ k6 r; o- O" R& P- ~ // an action group, because we want these actions to be
; n/ E+ d# R, p1 B+ N // executed in a specific order, but these steps should; d" u- Y! y& X. O* V6 K* W5 y
// take no (simulated) time. The M(foo) means "The message( W$ j& M: k; B& p. @
// called <foo>". You can send a message To a particular
3 Y; }& `% L3 i; b9 C. b // object, or ForEach object in a collection.
! |! p; m; y# ?# G+ \" o
w2 n+ \, z# Z6 |0 E: B9 m& S // Note we update the heatspace in two phases: first run
' M9 G' ]; J: ?; D6 x // diffusion, then run "updateWorld" to actually enact the1 @3 Z2 O, y$ Q7 ], G- e+ T
// changes the heatbugs have made. The ordering here is
$ S# v5 m# e2 K" |/ [3 S // significant!' L9 p! B: y7 N7 c% |/ \. y
# G) G2 _1 U1 q) |9 |! [# R& T* x // Note also, that with the additional
2 D% h; g, Z/ t1 C" v9 W- P3 s$ c // `randomizeHeatbugUpdateOrder' Boolean flag we can6 q6 o" d/ Z0 q" k3 e
// randomize the order in which the bugs actually run
, N4 T) j( t* f9 t, g: S // their step rule. This has the effect of removing any& m& d7 P U0 V: q; a2 e
// systematic bias in the iteration throught the heatbug) i/ }' r R- @3 G( k8 D+ n
// list from timestep to timestep
5 X$ h i. h, I; k2 k; m
, ~$ z3 x* |+ d3 S; L // By default, all `createActionForEach' modelActions have3 I! G! ~3 e0 ?$ ]$ ?$ @! Z( E
// a default order of `Sequential', which means that the
& Q# {8 H- a0 P1 c: K7 O0 ? // order of iteration through the `heatbugList' will be
: T$ W3 x' `' [( F // identical (assuming the list order is not changed
) a$ q& C: t, R- z. Y# ]/ U: R' r8 J( | // indirectly by some other process).4 |; a; S+ d; I2 T
# U5 S9 A; k2 y modelActions = new ActionGroupImpl (getZone ());# E" _* E1 V5 U7 l' ?1 o/ a5 `9 i x
+ v7 @; t0 v9 B; ^' m/ e/ ^ try {% e7 e7 I% v2 _: P l+ _/ F& {
modelActions.createActionTo$message# } `5 X5 U& ? \6 W) V- L* n
(heat, new Selector (heat.getClass (), "stepRule", false));
* Z6 R( L9 @) i1 ?, ] } catch (Exception e) {
2 }. N+ R1 Y* [1 e. B2 q! k6 b System.err.println ("Exception stepRule: " + e.getMessage ());! K- \* Q( c- \8 L+ k
}
# a; f3 G! h; B- X# b9 [1 l! k" L. B3 K4 h ?. C% B; X. j
try {9 C2 ]3 ~; \( x1 S M( R7 ?, b+ j
Heatbug proto = (Heatbug) heatbugList.get (0);
$ ]1 w2 ^2 E& ?" @; p# f6 | Selector sel =
4 T$ ?" y ]! H" ~$ N new Selector (proto.getClass (), "heatbugStep", false);
+ u, J& S% l- \! C: s! W# ^ actionForEach =0 r X8 d) g1 n n/ p4 f0 F; V
modelActions.createFActionForEachHomogeneous$call
( F3 y5 H' g8 h$ Z) K, \1 Z (heatbugList,
# ?; B6 p0 n' C# g8 U( j new FCallImpl (this, proto, sel,; m5 y" q) h8 s. h5 b0 y
new FArgumentsImpl (this, sel)));8 {+ n. v" M R i( t- L ~
} catch (Exception e) {
" {) n. N. S* T% `: ~$ y5 G e.printStackTrace (System.err);
8 q& K" `) O9 O }
2 w1 `& {$ X* c* V! J2 v ! L0 D5 U, i# }) p7 `2 A' I
syncUpdateOrder ();9 X7 h2 T x! I7 o& T; ~, O
5 ^( h7 C0 H7 z7 z8 V
try {; [* m. B8 o, R) ?6 Q3 U
modelActions.createActionTo$message & v2 L0 o( C/ O' _
(heat, new Selector (heat.getClass (), "updateLattice", false));
5 L o0 f; a- v9 L# O } catch (Exception e) {$ K! ~; ?- J. C( x/ P
System.err.println("Exception updateLattice: " + e.getMessage ());
5 A0 h" }* _* N2 e. T }
$ b0 T) S( F, A2 q. r! D$ |7 A# ` % C- B, X, M, ?) X
// Then we create a schedule that executes the0 H! [" [9 v) s
// modelActions. modelActions is an ActionGroup, by itself it3 Y6 S: V' y# T$ q
// has no notion of time. In order to have it executed in* f, \* A j, C/ N; U; K2 n
// time, we create a Schedule that says to use the' v. K, \" y' ]; Q4 E; Y* M
// modelActions ActionGroup at particular times. This+ a2 o, j- X' a7 e. ^! d9 `
// schedule has a repeat interval of 1, it will loop every
: A) S, o/ a. M1 z1 V$ K // time step. The action is executed at time 0 relative to5 q b6 N& q" i* H
// the beginning of the loop.
; O6 O1 i1 P3 B2 P5 L: g/ v) ^! G% I4 d5 {" Y/ t3 Y
// This is a simple schedule, with only one action that is
! d3 c; N$ w1 @3 i. f5 \( p // just repeated every time. See jmousetrap for more
, @$ F7 J9 T$ Z3 ` // complicated schedules.
% v% _- q# T. Q 3 `0 v2 q& ^! \* W
modelSchedule = new ScheduleImpl (getZone (), 1);8 A; G5 G6 Z! L8 i
modelSchedule.at$createAction (0, modelActions);
4 c: D/ b' G9 O$ f0 ^7 k4 H; ` - S8 n8 O% x* |* ~
return this;8 ?7 K- G( N& R, j: W4 j, |
} |