HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; H+ Z( C) @; B# F" {
8 ?# O2 E i5 `, M0 w
public Object buildActions () {4 H: c5 @$ o, L5 E
super.buildActions();4 `5 C& v1 e- P8 n/ E3 W1 j
' G; \* V% V) z+ ~
// Create the list of simulation actions. We put these in- A) y1 a K0 B; U1 E, e
// an action group, because we want these actions to be: C5 I* D k! o$ W6 d% r; L
// executed in a specific order, but these steps should
2 I: \5 ]' [: ]! ^ // take no (simulated) time. The M(foo) means "The message R+ \) [0 b( z S1 v
// called <foo>". You can send a message To a particular
' w4 v& @8 h r7 x- d // object, or ForEach object in a collection.
9 x& r2 d6 Y+ g& b4 m 1 i0 i2 s( l2 f- `7 z0 I/ ?" p
// Note we update the heatspace in two phases: first run# v( D- `9 B/ k
// diffusion, then run "updateWorld" to actually enact the
* N+ ]! q, N. v" f j% ]1 N% K // changes the heatbugs have made. The ordering here is
# `) \6 [! _9 j! t5 l // significant!+ ]0 M' l) g7 g- m4 v' y8 r
+ h: @* K: |2 ~- h0 d, e // Note also, that with the additional
7 v) B x: }" D; |) b, J; Q* N7 j& T // `randomizeHeatbugUpdateOrder' Boolean flag we can! V b/ F4 \+ Y9 P, a2 F/ }) d
// randomize the order in which the bugs actually run
6 M: x# u# @6 K% z1 m, J% z3 \1 o7 ]4 ~ // their step rule. This has the effect of removing any
0 O# m* Y1 V2 n- t; g // systematic bias in the iteration throught the heatbug, Y1 f& c% H) g4 f, @
// list from timestep to timestep
8 N/ {/ W" [+ t- h) e 2 J' n5 X* C4 g- Y( k" B
// By default, all `createActionForEach' modelActions have& l9 k1 P T4 }6 ]
// a default order of `Sequential', which means that the+ u ?: f" {) y% o4 M% G
// order of iteration through the `heatbugList' will be
) q4 V6 j$ q5 q9 b // identical (assuming the list order is not changed: {# {0 }7 F0 `+ m- I$ o
// indirectly by some other process).2 P# R0 y7 U6 f# X
! M' K, R+ p8 T0 a1 ~
modelActions = new ActionGroupImpl (getZone ());. g9 I9 _ d' ~; x
9 b0 S5 @, P( c( |% O0 T
try {
8 z7 l( M/ |( V' A modelActions.createActionTo$message* P0 F$ F# o7 y0 o' K3 w' Q
(heat, new Selector (heat.getClass (), "stepRule", false));( \. |3 w" p! r. a
} catch (Exception e) {
! C2 m/ I; u- V9 W System.err.println ("Exception stepRule: " + e.getMessage ());* e2 Y$ Z A1 M/ [
}
% s" x/ O d+ \4 M7 P5 B. k, C0 K
try {. g' ]/ @ @+ b* F% ^' v
Heatbug proto = (Heatbug) heatbugList.get (0);4 W& y1 y7 c0 g. ?' Q! m
Selector sel = ! g8 b P+ I i' X% u0 U4 j
new Selector (proto.getClass (), "heatbugStep", false);$ ~5 J3 D- S i0 ^0 X, j4 w+ @; W
actionForEach =
) f6 {; e6 B8 c modelActions.createFActionForEachHomogeneous$call
p3 ]8 }9 _7 s( x (heatbugList,
" I" u/ @$ N" d0 t. ^/ m new FCallImpl (this, proto, sel,. I$ A9 X0 k9 ~2 d @2 l8 {; ^$ _ h
new FArgumentsImpl (this, sel)));
7 l/ M _3 {& ?, i2 ~ } catch (Exception e) {+ z( B- Z+ f! H4 Z( Y
e.printStackTrace (System.err); I" Y. h7 {8 V! j
}8 J" l' G! o! N
/ n( ~6 J6 I7 I$ l! n
syncUpdateOrder ();1 i. x. f, ~2 P: z0 u
' e. e& H w! @% Z
try {
. f F; l7 W' L* z9 Q modelActions.createActionTo$message x g5 L3 N9 D, j
(heat, new Selector (heat.getClass (), "updateLattice", false));
% I6 d4 m2 R! a, R4 B2 P" w } catch (Exception e) {
2 r, S* x3 x) T9 l/ E9 s% V9 [5 Y System.err.println("Exception updateLattice: " + e.getMessage ());" o) X& Z9 Q5 o. N
}
- [9 p b+ Y) O4 j4 n
3 f5 l0 V# Y1 O; W) W // Then we create a schedule that executes the
2 I/ E7 R" `! p( B5 e! n // modelActions. modelActions is an ActionGroup, by itself it
# ]! R9 x9 r/ H8 V' ?. { // has no notion of time. In order to have it executed in. g: a# K& T3 n$ D
// time, we create a Schedule that says to use the
) y" G* p: x }9 X! b! A0 s# K // modelActions ActionGroup at particular times. This
0 P# q* G$ ~1 M3 Y7 f1 H b // schedule has a repeat interval of 1, it will loop every
4 i. E v1 k& t- [ U // time step. The action is executed at time 0 relative to
' S H: s+ ^2 p! D4 c; s // the beginning of the loop.8 S1 x1 {7 D# R; X3 h( H
' w l0 D* Q6 S! n" h) l // This is a simple schedule, with only one action that is
% _: A; g( C2 L* p9 P) L // just repeated every time. See jmousetrap for more, @# y* f( J# m t9 ]
// complicated schedules.
6 M) u/ Z) b( N 9 \ Y+ p6 k" n
modelSchedule = new ScheduleImpl (getZone (), 1);
/ t& J% U/ j6 f modelSchedule.at$createAction (0, modelActions);1 `4 T1 M* G5 t4 [( `. @
4 h" W" q0 I! o. ^
return this;8 ~. s" M3 \9 C+ N$ f7 d1 Z8 J
} |