HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 n6 l5 q# ~: m8 k7 r; {* |+ Q* G9 m. V; `9 |* b, \% n
public Object buildActions () {
! d* F' {6 l7 q3 ^& U- i super.buildActions();
) d, z4 w. Z- r" \8 d
% } g+ T# x; K4 U, r // Create the list of simulation actions. We put these in. J8 Z, L; I- v8 g' h) e0 }
// an action group, because we want these actions to be5 |" {4 h) k, i( _* M2 E
// executed in a specific order, but these steps should
3 T2 I0 ~# o6 b" v+ M4 S& c+ | // take no (simulated) time. The M(foo) means "The message$ p }+ |- ?4 p" W) d! d
// called <foo>". You can send a message To a particular
5 N' F U: V, z) K1 ?2 K: d- j // object, or ForEach object in a collection.) O; \9 Y. Y# p! G0 X
/ w; Y& ^& e0 D4 Q1 I
// Note we update the heatspace in two phases: first run
% ]' E7 w6 i& z# v // diffusion, then run "updateWorld" to actually enact the
. d) p, @2 b' \3 O8 K$ A7 l% f9 K5 v // changes the heatbugs have made. The ordering here is# J- N' C7 P0 ^( C0 m9 ~+ U
// significant!0 V" J# A ^% U3 X& |* N- O
0 ^" N8 t! v L) X1 G
// Note also, that with the additional
8 S" U0 W; U/ K+ ^, s; i // `randomizeHeatbugUpdateOrder' Boolean flag we can
0 G. B G* j* A1 p- A // randomize the order in which the bugs actually run
1 M- P( k( C9 P* Z$ h8 u // their step rule. This has the effect of removing any
M" Z3 ]* n! A0 P/ X6 A" ^8 ~ // systematic bias in the iteration throught the heatbug5 o8 v6 K- ?8 Z* j& K6 J3 d8 [
// list from timestep to timestep! f- A. x4 d* V* K# u9 ]8 e
) q- x" U: y3 j- Q$ i! D. H
// By default, all `createActionForEach' modelActions have0 }. B0 @0 V2 P1 W5 d# C
// a default order of `Sequential', which means that the
. w! ~$ a1 h# `) o% B8 q8 U // order of iteration through the `heatbugList' will be" i: W2 N2 E, H4 I: e
// identical (assuming the list order is not changed
, O! r6 w; M" p // indirectly by some other process).) s S7 U/ r3 |$ |! f0 M
) k, H( |! f7 P. ` B
modelActions = new ActionGroupImpl (getZone ());
" z0 q) b: o0 J) k3 i9 E
& \/ x& v: g- A- E3 F1 d" @/ t try {
! r+ [8 `$ B9 |, o7 l$ Z) V- ?( m modelActions.createActionTo$message
$ J9 j6 ^0 T. m+ z5 g (heat, new Selector (heat.getClass (), "stepRule", false));. e* M' @8 q! x
} catch (Exception e) {% m' H' h1 J0 v- ]
System.err.println ("Exception stepRule: " + e.getMessage ());7 }0 y/ ~9 x3 K6 y4 C) d" j
}
9 t6 O1 m# R2 |) T. I
( r/ N0 b, o' R ~, P try {
4 x) v5 C$ J# L Heatbug proto = (Heatbug) heatbugList.get (0);: W) N& e( V) s$ C( N
Selector sel =
& L; _8 ^- l. u new Selector (proto.getClass (), "heatbugStep", false);" x" B# [2 t, e+ O3 A! J, D# b+ {
actionForEach =
9 G8 b; H6 N% A7 b9 g modelActions.createFActionForEachHomogeneous$call& [. t% o, D7 w4 c n6 Q
(heatbugList,& T/ z/ c2 a6 @+ ]0 C- t# C
new FCallImpl (this, proto, sel,- ?8 }3 x: @, b
new FArgumentsImpl (this, sel)));+ C0 f L, N0 p4 W
} catch (Exception e) {
- J- K7 V9 { }$ {$ L; w e.printStackTrace (System.err);! Z7 H0 g1 e5 p: L8 y. ]
}- y$ a+ j; W, M' M$ j% \
; u# J$ u3 f6 P# M3 p
syncUpdateOrder ();) m" V8 F) F" q+ a
- J1 f% X4 M; R$ _
try {
% h0 @+ T% b7 |: X* @; l! L modelActions.createActionTo$message , d1 U. t2 D+ j8 F
(heat, new Selector (heat.getClass (), "updateLattice", false));
( n: z& {9 A- \4 w& X } catch (Exception e) {
6 _" r2 ~) Z8 o/ S' c. d System.err.println("Exception updateLattice: " + e.getMessage ());
" y; Q1 \7 l2 O q, R9 Q- B }
" r% W) f& T: w4 l; c/ c
* P, L" c+ L+ [/ l! H# Z) i y // Then we create a schedule that executes the! y) l' P: y. S" {
// modelActions. modelActions is an ActionGroup, by itself it1 \7 k5 \" @4 M1 A3 u
// has no notion of time. In order to have it executed in; X8 a' w9 \! d4 F: d
// time, we create a Schedule that says to use the
. m/ }; m1 D9 {/ h& O // modelActions ActionGroup at particular times. This
4 k/ r3 L T K6 b // schedule has a repeat interval of 1, it will loop every7 K p9 N! s) Z1 w N
// time step. The action is executed at time 0 relative to
6 m7 a4 v* L$ y; X O U/ v // the beginning of the loop.
1 z! W8 n, V/ {! Q
5 d8 _9 c8 y. v: l7 |; |& o // This is a simple schedule, with only one action that is
& \: t- T# I0 p1 ?( j6 t // just repeated every time. See jmousetrap for more
5 s$ Q# A9 r0 X/ T, r5 A // complicated schedules.% e$ u2 @) y0 {: b6 L
( Y8 d2 p# n. P. I3 h" m modelSchedule = new ScheduleImpl (getZone (), 1);
* b* I# U+ u c- B modelSchedule.at$createAction (0, modelActions);1 i3 \4 T, k0 u9 y6 v4 V- c
: ?3 V( N+ o1 j' t0 n c/ z. z) |
return this;
) p4 Q9 E$ ~! p, u8 q9 ^ } |