HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. ?9 P! h' @9 `7 K9 V
/ W/ A& T" ]( k" U0 D4 N$ d g
public Object buildActions () {: V, T7 }: Y* G- Y" Z8 C" u8 r
super.buildActions();
6 S2 }! E$ I! m/ K
) h( n0 l$ \% E# _5 _ // Create the list of simulation actions. We put these in
5 t7 N7 F4 P4 |) I5 T // an action group, because we want these actions to be
$ Q8 ?8 w. E: Z // executed in a specific order, but these steps should
9 ^ c) f# Z% n2 e! k // take no (simulated) time. The M(foo) means "The message: O" C6 e3 H4 l
// called <foo>". You can send a message To a particular
- `* e( z! w4 N+ W // object, or ForEach object in a collection.
2 E+ C m' h5 d
$ |8 l# [: W, R1 B0 d! y // Note we update the heatspace in two phases: first run3 f4 ]9 r2 K% [
// diffusion, then run "updateWorld" to actually enact the
2 P( a7 J( D+ O* Y# L; F s$ r( m6 T // changes the heatbugs have made. The ordering here is
5 Z q7 b2 j, C: ~5 I // significant!4 R5 ?# @# q4 W! q2 V Y4 u' d
2 K/ E7 l# t6 G- S( a // Note also, that with the additional
/ u7 J! y/ d- C% X2 j, l" L // `randomizeHeatbugUpdateOrder' Boolean flag we can
6 O- g7 R9 Z9 w% {. D2 m7 U // randomize the order in which the bugs actually run
$ z$ K4 o; C5 U2 q; \ // their step rule. This has the effect of removing any
( m. @4 y& w% [" b x( Z g" u // systematic bias in the iteration throught the heatbug
: w q$ c1 b' Y, m // list from timestep to timestep; q8 ^; h4 }; `% V0 g; _2 l# m8 \9 M
! @$ @1 K& P9 I" F0 u# M // By default, all `createActionForEach' modelActions have" c0 X u" K6 ?% O0 N
// a default order of `Sequential', which means that the
3 [1 A" D) @! w$ F2 p, D // order of iteration through the `heatbugList' will be
# q' L# B( S3 J# G // identical (assuming the list order is not changed
2 ?$ L5 H I% t+ Y9 o // indirectly by some other process).
8 `6 ~0 C+ z" h8 [
0 _0 c8 k9 g8 A1 E; [( B7 n modelActions = new ActionGroupImpl (getZone ());! m( `! P* A: \( n! J( N+ t
* @: _8 a; ~3 [% Q
try {3 y* N2 L, ^5 t; H
modelActions.createActionTo$message
9 a; u# b% T% q$ a: s7 Y3 E% q (heat, new Selector (heat.getClass (), "stepRule", false));
' n4 L) I# O( q) h9 i! Q } catch (Exception e) {# p5 S/ D& v* E' i- w) q6 z+ _! F
System.err.println ("Exception stepRule: " + e.getMessage ());
1 x) {: K/ {6 n4 m8 [4 I }' E7 `) o, q0 @& a# j% c
$ @& G1 p" [, g8 D0 N7 N try {
) G* V: |( n6 a- C& K' l s- C9 E Heatbug proto = (Heatbug) heatbugList.get (0);7 E" z6 L0 k0 o$ A
Selector sel =
; L) M8 K' a2 z8 U new Selector (proto.getClass (), "heatbugStep", false);
- s8 C2 @( ~& ?5 p; ? actionForEach =
& C) E0 M9 G3 ^$ I( H w modelActions.createFActionForEachHomogeneous$call; ~) t, o! a' ^
(heatbugList,, M: u9 g( \$ e4 u+ v5 n- h
new FCallImpl (this, proto, sel,3 i; j2 E k/ L c a6 G
new FArgumentsImpl (this, sel)));
+ K3 K$ u j8 N& y3 C, w1 P: V } catch (Exception e) {
# D4 A7 e4 K; j. e: R5 S" n0 W- J W9 s e.printStackTrace (System.err);
9 a4 I2 {9 V/ H) V* ~. f, b }7 E, D" Q. ` S2 \
: M! j0 m" T3 h1 p/ n6 U! O syncUpdateOrder ();
; q" h$ j: g: {* L" F; N/ ]9 _) K3 S5 T" O) o! G; X
try {
0 A, ^4 Y m2 L" e* I modelActions.createActionTo$message 7 l2 k7 Y) w( o7 b/ q/ I4 c
(heat, new Selector (heat.getClass (), "updateLattice", false));
5 D: d4 e3 D4 c } catch (Exception e) {- [, X1 O$ R4 u
System.err.println("Exception updateLattice: " + e.getMessage ());6 L7 _8 P1 N6 D' I, Q9 ~
}
' T1 ^; R9 u; w6 u6 X / H5 P% w$ H+ W
// Then we create a schedule that executes the
7 R1 s' q0 ]3 y. U O, t' M // modelActions. modelActions is an ActionGroup, by itself it
, u/ P1 [! w0 Y9 T // has no notion of time. In order to have it executed in
: T% [8 v S. r4 [; G // time, we create a Schedule that says to use the& b4 | }( `0 W C
// modelActions ActionGroup at particular times. This
, u1 U6 r, F! l2 |& t/ q5 K7 r; X. T // schedule has a repeat interval of 1, it will loop every
' D2 h0 j. S0 r4 S // time step. The action is executed at time 0 relative to
2 e. G S( l8 N& }/ I- t ^4 R // the beginning of the loop.5 ]$ Z+ E+ O# E8 X3 ~
; } \5 w6 e: C0 I" S
// This is a simple schedule, with only one action that is7 {7 F0 H/ p& c) I+ A
// just repeated every time. See jmousetrap for more
) [9 R. [: S2 `2 u, b0 \! n // complicated schedules.) c) e: q0 C: x* z. H; d/ g
$ s. n; b7 `5 u) L9 v9 D% t# O6 k/ q% L
modelSchedule = new ScheduleImpl (getZone (), 1);% B2 x/ N: f9 }' F) S
modelSchedule.at$createAction (0, modelActions);% f9 l/ o; V. h# h4 E) T
* E. f7 u3 n% N3 B
return this;7 D* d# ?* u+ h5 `. O4 }1 p
} |