HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* ~1 Y, } m, G- Y/ M
% i3 ]1 y$ N# _8 R, g0 b/ Z public Object buildActions () {
- J( e# }& ?. y/ m super.buildActions();+ c4 ~$ d% P; k3 S
" K2 ?( ^0 \2 [7 v9 U# m1 R
// Create the list of simulation actions. We put these in
7 B9 w5 _7 _1 C8 _& z // an action group, because we want these actions to be
' s/ ?0 z9 q x) A1 ?" u // executed in a specific order, but these steps should, R- i. E" ]5 m& A* i
// take no (simulated) time. The M(foo) means "The message2 {: s6 `3 h* m$ Y1 B
// called <foo>". You can send a message To a particular
/ z2 e8 C" x$ P+ Y // object, or ForEach object in a collection.
, P4 Q2 e0 H1 F. T9 v6 H" I) s d 8 q5 U% y9 d; X
// Note we update the heatspace in two phases: first run
) c. n) q- J. l& ~ // diffusion, then run "updateWorld" to actually enact the/ d3 r1 Q9 s9 x
// changes the heatbugs have made. The ordering here is$ |. O' }( a1 `. \4 `9 R) a6 \7 W
// significant!+ r$ C9 h1 b+ C/ `, v
, @: g8 c9 h8 I! B
// Note also, that with the additional
& ]6 [6 M- o4 Q( w // `randomizeHeatbugUpdateOrder' Boolean flag we can4 F# \0 t( Z- V& C) O3 T! N; m. J- I
// randomize the order in which the bugs actually run5 U1 O& q3 R# y
// their step rule. This has the effect of removing any
7 x( @, b# H7 Y2 u- b) v, } // systematic bias in the iteration throught the heatbug
8 M( u3 v& T5 h* z, { // list from timestep to timestep
8 I w2 q6 d8 D8 k- j6 k" v. @
8 q1 S5 p) w8 X% R1 y // By default, all `createActionForEach' modelActions have
- J- y4 k/ S0 C // a default order of `Sequential', which means that the- C' ~% }% T( s$ k
// order of iteration through the `heatbugList' will be; D* Q+ \. b7 i/ U6 h
// identical (assuming the list order is not changed) v; b |2 K- e5 [
// indirectly by some other process).7 Z. [0 M5 P. O7 m, ^. Z! j
. q! E: @1 j. @9 J) c. t modelActions = new ActionGroupImpl (getZone ());. y$ }: Z+ x1 P( _
" Q' T& p; c. _5 D
try {
, B; Y2 G+ V3 s) t; q! v' [ modelActions.createActionTo$message
! ^& J$ h. P O5 K (heat, new Selector (heat.getClass (), "stepRule", false));* Y' m& q, r+ g4 e1 ?& l
} catch (Exception e) {
9 W, p/ T# \9 K5 D7 ?6 Q System.err.println ("Exception stepRule: " + e.getMessage ());
4 g, B" S4 v6 s0 N }+ L$ E: }6 u x d. }, x
% F& r; o: ^6 v
try {, c+ Y" v, i- {& N# Q" `: Z" M
Heatbug proto = (Heatbug) heatbugList.get (0);
6 e% [2 V/ d( A! q/ I Selector sel =
) g0 N4 Y+ \5 L, u" y; U8 d) T. D new Selector (proto.getClass (), "heatbugStep", false);5 h' U2 E0 Y; H) Q2 u" T8 k
actionForEach =, P) x6 k- r( ]+ f. `$ g
modelActions.createFActionForEachHomogeneous$call) i( k2 ]6 L' ~9 e d
(heatbugList,+ c" n3 Q- G+ {. G c9 C
new FCallImpl (this, proto, sel,! Y) U2 A g2 I5 }6 b
new FArgumentsImpl (this, sel)));
- Q- p) k7 M: K } catch (Exception e) {
( c/ ^/ S/ E* B0 m0 s e.printStackTrace (System.err);7 a, k1 e0 } r5 m; n1 w; G
}3 x& p, G+ n! O
% c" v9 i7 g- M4 J6 y
syncUpdateOrder ();
/ N7 U0 a4 S- `1 e8 c- p3 G/ R/ t
, C. B% y1 d: X. h$ v+ w try {% r0 f, e3 j; f, Z8 J8 d
modelActions.createActionTo$message . x) _/ V* j0 T5 x( |$ R6 f) O
(heat, new Selector (heat.getClass (), "updateLattice", false));
' x2 y+ z# O, n0 m# h/ ^" Z5 F$ M# k } catch (Exception e) {
+ a5 }: W0 J$ H# b4 C System.err.println("Exception updateLattice: " + e.getMessage ());- s$ p' T; J. C8 u
}
1 k; b: a7 i$ ^. @1 W& K
6 W) c/ B, r* b' \3 m: ?* I6 k1 C1 J // Then we create a schedule that executes the+ o1 O+ y; v; c) z
// modelActions. modelActions is an ActionGroup, by itself it
) W( l5 b9 F7 H. [4 F. e // has no notion of time. In order to have it executed in
% U; O( }) c( |1 ]7 d // time, we create a Schedule that says to use the
" w! Y5 p$ o; W5 ~. s% R // modelActions ActionGroup at particular times. This2 D( E7 s8 R3 c$ q$ |3 P9 i
// schedule has a repeat interval of 1, it will loop every- f1 Z6 K+ k, Y6 x8 s
// time step. The action is executed at time 0 relative to
5 g$ ?. _9 O2 S% l0 W4 L // the beginning of the loop.: G* ~! j3 g1 P1 Y i' J" c
# e) T9 Z. {9 A; ~/ Z/ I // This is a simple schedule, with only one action that is
n& @% w6 T6 o+ o+ U2 w3 |& r // just repeated every time. See jmousetrap for more. }. |6 B5 T) D- `8 Y/ d2 j
// complicated schedules.3 q( C) f3 r. L# x* v. e. \
$ [6 O0 R$ ~5 i5 X* ] modelSchedule = new ScheduleImpl (getZone (), 1);
( |4 I: d7 i* K/ z7 {0 v+ I, } modelSchedule.at$createAction (0, modelActions);; m7 s# ]! I8 v
$ p& k1 N) z y- q- l# P return this;
& ]8 l8 W8 l) o- z+ O' s } |