HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
4 L/ E0 o) v2 V' \0 M9 x5 g
* J9 X1 i' \$ D) P Y public Object buildActions () {$ R# n- g9 ^) @- b2 Q$ S @
super.buildActions();
7 _% ]4 b% j7 L7 m
" u0 e( w+ ]2 g, b* T9 `7 Q6 h // Create the list of simulation actions. We put these in$ t2 U0 X9 K( D8 W
// an action group, because we want these actions to be0 K3 }9 b& _( [2 X2 E
// executed in a specific order, but these steps should8 T& x# G9 _! M; ^1 l
// take no (simulated) time. The M(foo) means "The message
; [; D; D) R' q // called <foo>". You can send a message To a particular
2 T( ^* J! f7 k // object, or ForEach object in a collection.
2 E, o" a+ D! Y7 t ; E& x Z# c' r+ @5 {/ M, I
// Note we update the heatspace in two phases: first run' R: C) M+ E) z9 k" X1 `1 ?
// diffusion, then run "updateWorld" to actually enact the
3 ?' u& S8 L( S$ w/ i- o1 d+ F // changes the heatbugs have made. The ordering here is
" ]1 P, w. i; A8 v+ T // significant!9 M2 l9 [0 Y1 E
9 E# U8 i' }, H7 t" Z$ @
// Note also, that with the additional
! o/ J5 w( [4 }! M9 \) z( h; d // `randomizeHeatbugUpdateOrder' Boolean flag we can
) U' X, s: k+ E5 X4 x7 k! [ // randomize the order in which the bugs actually run6 w/ P" h* v) G
// their step rule. This has the effect of removing any
! X' B! ~8 ?8 e2 Y // systematic bias in the iteration throught the heatbug& [! g6 V* ^/ R4 b" V% L
// list from timestep to timestep* @# A; E1 O9 A. \( D) |$ }0 l
7 e9 X6 }" K' _( L& ~) J% i9 y: D3 [
// By default, all `createActionForEach' modelActions have
% \9 F1 h- J7 A* E1 ^1 C+ [ // a default order of `Sequential', which means that the9 r$ J! `7 y" i
// order of iteration through the `heatbugList' will be' g3 r! \0 j( ?6 H' D: W
// identical (assuming the list order is not changed3 |" {8 x) l3 o% h: e
// indirectly by some other process).
1 @# l# s. d( t! a$ Z+ | 8 k M' h+ a1 y- l# W! n* V/ x
modelActions = new ActionGroupImpl (getZone ());
2 {9 B5 k2 d4 t' ^( x! G- ]" F
% b6 d& H+ t1 k' A, P try {4 A; \9 V! \5 }
modelActions.createActionTo$message& ]; E- ]: `& K# I
(heat, new Selector (heat.getClass (), "stepRule", false));
9 z5 }% C4 g/ Q% o/ y& V( I- I( F } catch (Exception e) { x' |: a. K* X- o, F
System.err.println ("Exception stepRule: " + e.getMessage ());1 X: i: x/ W b, P
}
! S& l$ O0 p/ J. ^8 d
5 G$ ~/ y6 W* O try {; _: h9 u; _. J: y4 H3 P! w) E
Heatbug proto = (Heatbug) heatbugList.get (0);
! z. n6 f- Z4 N$ W7 V Selector sel = $ q8 B1 Q" U* }5 I
new Selector (proto.getClass (), "heatbugStep", false);% L3 G, P9 z+ p% H; c6 l
actionForEach =$ N- N5 T3 i/ \0 [ w7 @
modelActions.createFActionForEachHomogeneous$call
4 ^9 \7 {$ w/ [7 D8 g( c (heatbugList,
+ _; }# V, D9 \5 A9 E new FCallImpl (this, proto, sel,9 c1 P: r9 B! _$ j) ^. U
new FArgumentsImpl (this, sel)));
) m7 p3 h7 S) Z- Z; L% X- U+ z } catch (Exception e) {( l/ M- e+ F1 w* `
e.printStackTrace (System.err);. n. j! z$ i+ f- H2 \) X/ a
}
9 u% u3 \# ^( i0 A i, I. O$ [ ) w& c' R3 Z" h8 J& H' s% O
syncUpdateOrder ();4 c; d0 P, o! j
1 z4 U% w7 l+ _
try {5 n1 A! r- a9 U# v, B2 d$ P) |; K
modelActions.createActionTo$message
7 S, e: c) B1 }# w- Q( f( v3 U8 P (heat, new Selector (heat.getClass (), "updateLattice", false));
* {" W4 ^- ?% c } catch (Exception e) {0 P3 ?6 P1 c, o! c
System.err.println("Exception updateLattice: " + e.getMessage ());
+ y( d6 j# |6 p# y& ~ }
/ P0 M: i: @* H
' t$ z X# B3 T/ U& }" L9 x, \" o // Then we create a schedule that executes the
' `4 |% H) u6 Q5 C' \0 L // modelActions. modelActions is an ActionGroup, by itself it7 e9 l) A- B0 j" c0 U- q# g
// has no notion of time. In order to have it executed in8 A5 k! ?; a( |9 |) u
// time, we create a Schedule that says to use the
) U* B+ P, s. H9 [ // modelActions ActionGroup at particular times. This
9 E+ q' L m4 ^1 P7 y0 V# s8 S+ t) V! ? // schedule has a repeat interval of 1, it will loop every. y' g- _! E h. _8 v" V
// time step. The action is executed at time 0 relative to
; C9 F6 ?! o8 ~/ S1 `$ [ // the beginning of the loop.( Z6 G0 i: }" E* z
4 w' n: U" X+ V
// This is a simple schedule, with only one action that is
& ]- Q2 m: ]1 B8 T$ W // just repeated every time. See jmousetrap for more2 ]# U5 `/ ~2 E! c: Z+ F1 G
// complicated schedules.
$ ]' C1 h7 b! M& e5 V 8 R% ~0 O7 A7 |" g# c6 ^5 z( [: G
modelSchedule = new ScheduleImpl (getZone (), 1);
- J8 O4 V0 n; Q% n% N$ L) q modelSchedule.at$createAction (0, modelActions);
' n) H: L# {4 o- n " z7 W( d1 ^9 ^ V
return this;, Z8 m' P+ s+ |
} |