HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. E6 Y t4 A& m* }" a/ j
7 e' {8 b" S/ g
public Object buildActions () {
# Z0 g9 V7 r- m8 E6 q super.buildActions();% z! j& k' \' d- d3 W# L
% q+ a# m8 H" w; t# x2 S0 y. M
// Create the list of simulation actions. We put these in+ R% e$ W: v5 B3 ~2 `" e: J
// an action group, because we want these actions to be
3 g6 M( V8 C. U8 F' ^6 p // executed in a specific order, but these steps should1 L( `5 u5 M# D! ~
// take no (simulated) time. The M(foo) means "The message
! B/ s3 F* H& A" d# d# K: T // called <foo>". You can send a message To a particular
9 y! W! p* r3 Z) B. r+ _" V- W: P // object, or ForEach object in a collection.
$ U/ X9 O8 T. O9 y6 U8 Y8 y8 _ / U0 m. ?2 @/ W. {8 ?
// Note we update the heatspace in two phases: first run
2 z( ~! Y9 c6 f3 v // diffusion, then run "updateWorld" to actually enact the; v2 l/ s' z: |) X7 o
// changes the heatbugs have made. The ordering here is5 Z4 p7 D0 k/ e A
// significant!9 ^: C% l1 Y9 j5 ^6 q* X
* `9 i& q8 e8 H6 o0 F: I9 p // Note also, that with the additional# H3 J; e( A- K; C; d. y
// `randomizeHeatbugUpdateOrder' Boolean flag we can
! n# C2 h0 g: y // randomize the order in which the bugs actually run6 T- v/ Y6 O% k5 J9 \
// their step rule. This has the effect of removing any" g% c6 B. ?$ V) j+ p0 E
// systematic bias in the iteration throught the heatbug# B0 S$ v! H, O# D
// list from timestep to timestep: ^& I& N1 l2 ]( z( w' s- @' n8 l
& T4 _1 `( \% i2 ?- ^- V
// By default, all `createActionForEach' modelActions have+ `( o: a+ t; \
// a default order of `Sequential', which means that the
* a0 S# K* M; k0 k7 X! s- [ // order of iteration through the `heatbugList' will be/ M) I& S! P% x% w; ^
// identical (assuming the list order is not changed
# r; c% [7 Z$ [) t. i( W; L // indirectly by some other process).$ N* X8 \3 o$ \0 ~6 l( Q7 b0 F
" q1 D9 c3 V* o4 T$ F& P8 H modelActions = new ActionGroupImpl (getZone ()); Z' Z s! h* u/ I7 G
: A( ]+ M5 W; f$ u9 j
try {
& J+ O! e* I! r7 b, h9 p9 @% i modelActions.createActionTo$message- P% j; l& K0 @/ `$ U8 b
(heat, new Selector (heat.getClass (), "stepRule", false));
+ s! J( Q; E5 I5 M8 m0 `: O5 j } catch (Exception e) {: Z# M2 V5 r4 v; ]# M3 u' p+ B3 J
System.err.println ("Exception stepRule: " + e.getMessage ());# S }, A% _; j8 ^' ]
}3 \3 ?, b8 G! E3 w' w8 H
* Q* x: m% e9 u$ Y try {
& a7 Z5 _2 f1 N9 u# d8 E Heatbug proto = (Heatbug) heatbugList.get (0);
9 h8 r% t. y# x+ ?8 o Selector sel =
5 y* y( b. R" ]0 C/ B6 h$ t new Selector (proto.getClass (), "heatbugStep", false);
2 W+ n* x) b) j- `7 Y9 l u( p actionForEach =) z& m3 u0 f: O4 f: e3 h
modelActions.createFActionForEachHomogeneous$call
# r$ P; j9 N% k @1 g (heatbugList,
2 l4 |; p9 z$ p6 K( P! w new FCallImpl (this, proto, sel,8 u2 @, C3 U" l* ~- K3 m7 S
new FArgumentsImpl (this, sel)));
0 Q1 s/ v3 ~0 V6 J( h2 q' A } catch (Exception e) {
+ Z: W' ^5 o& C9 b: { e.printStackTrace (System.err);, n: P# l3 @3 }0 K
}# u, _0 C+ a6 S, u, f7 ^. z
1 T- z3 _# C$ j H" | syncUpdateOrder ();5 k1 b: h3 m% `
; Z) b4 w9 H% {5 d
try {5 W' d$ ?% C( k$ ?
modelActions.createActionTo$message 6 F1 d' v4 T3 [4 U! }$ J/ l/ \" _- M
(heat, new Selector (heat.getClass (), "updateLattice", false));
+ _0 _) y) \0 V( D+ w } catch (Exception e) {
* m, Z; t, W0 w System.err.println("Exception updateLattice: " + e.getMessage ());
, m' f' ^0 f# N6 w/ D; b9 A }
0 t+ K2 X( w; H( C1 N6 @5 q$ w5 N- ? 1 g5 W+ k$ e+ v
// Then we create a schedule that executes the& ]0 b. L& M8 [9 `3 X: h4 C- b
// modelActions. modelActions is an ActionGroup, by itself it
2 }- M7 d* O* D/ D9 k h) N // has no notion of time. In order to have it executed in
: T- P+ V. e% m // time, we create a Schedule that says to use the
0 `3 c+ A7 V0 M, X2 c( r+ D // modelActions ActionGroup at particular times. This
& P" {0 M* h1 Z! w* {) s* ^ // schedule has a repeat interval of 1, it will loop every4 ]+ d& R& |+ Q+ U- o
// time step. The action is executed at time 0 relative to
1 k! v* |( E) u3 b, O1 a // the beginning of the loop.5 ~8 Y$ }& m( l: m
% b: Z4 g, \1 N: x. L // This is a simple schedule, with only one action that is5 P* K, |" B* J2 ~& B
// just repeated every time. See jmousetrap for more d# [: l5 a5 k6 U+ @* _# a
// complicated schedules.
; X3 ]& _, C4 P" H# Y ! g& G) B1 R" x
modelSchedule = new ScheduleImpl (getZone (), 1);
2 X8 U6 B, V% f; B% J/ q- m* M1 l modelSchedule.at$createAction (0, modelActions);: r8 [1 c- J6 x# n- U
1 S K9 _9 Z* X+ k! W/ [ return this;
. l, q4 X* x. i, o } |