HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* b9 [% Z! r l* D/ R. G0 d7 f+ ]& Q
public Object buildActions () {, ]2 i3 X2 L) [# @
super.buildActions();
/ u! Z d" u5 F" l+ @- z
. _, t! I w, ^$ B3 K // Create the list of simulation actions. We put these in, U# {. P B k" K2 j1 a+ \/ p' [9 ]& g) _
// an action group, because we want these actions to be
; l9 n1 C |" u- h2 N // executed in a specific order, but these steps should
o1 ?; p+ K; P/ {1 j // take no (simulated) time. The M(foo) means "The message. D) W" b4 o) b& b9 B1 x
// called <foo>". You can send a message To a particular
l7 M: Y8 D# p2 I) e$ T( N // object, or ForEach object in a collection.
* S0 C/ j( M* n" E9 c6 C2 a
. C- q" ]) {% W% T# B4 G3 a+ F' t0 n // Note we update the heatspace in two phases: first run3 Y* i' [1 i) [' W
// diffusion, then run "updateWorld" to actually enact the. O/ J2 _; u* N) E# U8 W/ Q
// changes the heatbugs have made. The ordering here is6 E1 Q. J2 P! p
// significant!: L( F- _ U, J5 R5 Z
5 y% B5 T9 \) j8 Q( X- {- x // Note also, that with the additional8 W8 o: R3 j3 @1 Y+ {: @
// `randomizeHeatbugUpdateOrder' Boolean flag we can* r6 a1 ?4 D# J* a: w
// randomize the order in which the bugs actually run3 K [, a" t) A n" s7 t
// their step rule. This has the effect of removing any
$ N# O" U, C. H. m! V* y& ] // systematic bias in the iteration throught the heatbug( N" N- V5 B/ ~9 s2 n2 t
// list from timestep to timestep6 q+ m+ T0 U: ^& U+ |3 r. s
! q7 ]- v$ Z& K
// By default, all `createActionForEach' modelActions have
, u( |: M3 A( ~. i, @9 c // a default order of `Sequential', which means that the
/ [; P0 T" H: \$ _& v // order of iteration through the `heatbugList' will be
8 Y: n, b# G" N+ K) T# Q // identical (assuming the list order is not changed# Z+ e. m( W0 S% y% O
// indirectly by some other process).
# T; t, k+ H6 I: b" L" X0 z
. I, X1 u1 M# i' S9 z* Y modelActions = new ActionGroupImpl (getZone ());
9 \! C& A% t! y- [- ]: }& T9 Y1 Q. r" C6 V
try {
, V, x! ^& h% Z) j% q6 e modelActions.createActionTo$message* b9 G6 ]5 C& ?7 g7 ~* z- b
(heat, new Selector (heat.getClass (), "stepRule", false));
/ T: m8 j+ e a6 t } catch (Exception e) {
* C* K3 e- v& o' Z( n! D System.err.println ("Exception stepRule: " + e.getMessage ());% ^2 r" ~4 A% W, L
}4 o0 `: n" {+ n
8 e, R$ c! Q# o3 }- j
try {. @3 {0 l1 Z/ X2 M
Heatbug proto = (Heatbug) heatbugList.get (0);
4 {6 Q5 s. s$ ]2 W" V( z# f$ K* I Selector sel =
( Y& `4 F% |2 @3 c# G, A new Selector (proto.getClass (), "heatbugStep", false);6 x6 y9 {1 d" t* p1 n2 y2 Y
actionForEach =% l% a0 X& y% [+ j/ ^
modelActions.createFActionForEachHomogeneous$call/ a- ^5 f/ W7 z1 W& h
(heatbugList,) j! T9 i. w0 `
new FCallImpl (this, proto, sel,; \8 H' b4 d- q X$ a
new FArgumentsImpl (this, sel)));
. x3 R/ Y) P' e" s. N: z" X } catch (Exception e) {6 D5 q2 d' x5 Q: u- T
e.printStackTrace (System.err);
4 C$ A8 I+ Y: L' V! N$ [) H }) D; X1 F; ^- X# h5 s4 r
2 Z: k$ ]9 v1 a; q; _" _8 e syncUpdateOrder ();# |- q. q( W& \8 F, p2 o
5 N* G3 ^% |- ]" t3 }- T+ j/ h' c* R try {
+ I1 n% { R+ b+ i* u+ a% a u* v modelActions.createActionTo$message
5 X7 w# r4 o( O% k8 [ (heat, new Selector (heat.getClass (), "updateLattice", false));' R# |5 d% B! N' G/ k" N
} catch (Exception e) {
5 [4 A3 [* A0 e; ?9 p/ c$ q0 Q System.err.println("Exception updateLattice: " + e.getMessage ());5 p, {' T! i' x. k$ w" A1 J! u
}1 K) z9 |3 o+ w; U4 g! a
0 B# P5 C0 r3 n. p% I
// Then we create a schedule that executes the
9 z O( N# _% ~6 y) n/ Q' \) k( D // modelActions. modelActions is an ActionGroup, by itself it
) n* M2 V" @/ {3 X' u0 ~ // has no notion of time. In order to have it executed in4 F" E5 K3 K8 n6 O8 b
// time, we create a Schedule that says to use the+ T$ l" ?& d0 x- \/ j) @
// modelActions ActionGroup at particular times. This+ R/ ?% U( L: Y9 O+ ]8 k) c
// schedule has a repeat interval of 1, it will loop every8 h# Q" M: T6 }) m! e9 |) ~( S8 l) j
// time step. The action is executed at time 0 relative to
0 L* F; S1 Q4 H, W // the beginning of the loop.1 f) C5 S1 W: k' ]
( H9 P- `9 p' @6 F+ } // This is a simple schedule, with only one action that is
* G. S* @9 p( ]; f A3 z0 r5 M; Z // just repeated every time. See jmousetrap for more
/ B. Z+ D" k4 D+ t // complicated schedules.5 J8 c3 K) _. H
5 V u- D. |( u( J
modelSchedule = new ScheduleImpl (getZone (), 1);; F7 }, m& r- ^
modelSchedule.at$createAction (0, modelActions);5 E, B; A/ Q+ y2 ]- W
w/ W) d* R( ~" Y2 M% Z1 n" E
return this;( }' v4 q/ s+ A( U6 o1 a7 |
} |