HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 O; V, M m. b' z9 V+ j2 A& L
% `8 e1 E3 h1 f' R7 Q9 z0 D public Object buildActions () {
# ^0 f( ~+ ]4 M/ G1 r super.buildActions();* }% x8 \2 Z+ h$ i- o: {/ F( }( H) _$ k
) i U# x, b5 Y& g8 t. ]
// Create the list of simulation actions. We put these in
4 p5 E7 [: }' G# [) _ // an action group, because we want these actions to be+ a& F- E+ {$ Q. g. F+ z F
// executed in a specific order, but these steps should5 w# g0 ~4 s4 H B9 d- U
// take no (simulated) time. The M(foo) means "The message2 J9 W# H0 \: M' m" C
// called <foo>". You can send a message To a particular- r4 s: P% M& _1 J7 S
// object, or ForEach object in a collection.& [( `7 x* B" a3 o* v0 O" u
( D$ Q5 l, g1 g3 T) y8 i // Note we update the heatspace in two phases: first run7 G+ s( Q( M9 q# m
// diffusion, then run "updateWorld" to actually enact the z$ D1 R( Q- a4 v. [- U+ S
// changes the heatbugs have made. The ordering here is. ^9 O8 \1 | s' Y6 n* S
// significant!
4 R1 {( @% ~& V# E+ l8 }+ h+ M
" }6 E7 D3 t4 d+ N: { // Note also, that with the additional4 A. c: ~$ |: R% F- ~- Q' [9 Y
// `randomizeHeatbugUpdateOrder' Boolean flag we can
7 U' C( v9 l! u: W1 c# t0 l2 @ // randomize the order in which the bugs actually run
7 H) S4 i3 ]: i5 }8 l1 m$ E // their step rule. This has the effect of removing any9 M/ h, |) Z7 h3 q- ?
// systematic bias in the iteration throught the heatbug
, Q |1 w% r. q3 J; d7 x // list from timestep to timestep
4 T# t4 w- [. v+ U+ j# y$ D : }* j7 i0 k0 @4 }: q
// By default, all `createActionForEach' modelActions have
6 e& ?# {+ Z4 ~' I4 h& a // a default order of `Sequential', which means that the
! d4 m7 T/ ^; B% C2 e" V2 L6 C // order of iteration through the `heatbugList' will be7 X4 S% e+ f/ I1 s
// identical (assuming the list order is not changed
! {2 N. M0 t: |$ J0 ]. K // indirectly by some other process).: Y x( D# b- V; z1 W! g% o
% m4 a! \/ e' c
modelActions = new ActionGroupImpl (getZone ()); T$ P4 p- E9 u
7 e& A# h/ m) W, u) A& M! d$ G
try {
9 @) [! _& M, l" L8 p n+ ] modelActions.createActionTo$message
6 @, N. ` t# S' K; \/ o (heat, new Selector (heat.getClass (), "stepRule", false));) c/ z' A! v" u s8 m9 R1 J
} catch (Exception e) {. @- z9 i4 [! g# n- p" V: U/ E6 J
System.err.println ("Exception stepRule: " + e.getMessage ());) w- @0 e4 t5 B5 _1 s
}- g- M! `5 V( e, c
* T4 g/ t$ g' A# F9 D# B
try {
, @7 \6 T4 z! l! Q$ X Heatbug proto = (Heatbug) heatbugList.get (0);
5 J# b; ~" Y9 c+ }( @ Selector sel = ' ^. p& }$ ?1 X, ^- {8 p, E
new Selector (proto.getClass (), "heatbugStep", false);0 A7 O s! @! h
actionForEach =
& @& O) j( b$ k& M- I3 B modelActions.createFActionForEachHomogeneous$call
/ H+ D. A9 Y% N! z. r (heatbugList,9 U2 |* d& ]' X! \% C) U
new FCallImpl (this, proto, sel,# c- [) w) H$ W2 }9 k; M
new FArgumentsImpl (this, sel)));
. K3 _* T I% c7 K+ T } catch (Exception e) {/ |2 m* u/ U2 J9 P& _, z" _% i
e.printStackTrace (System.err);$ b; p" i# ^/ [7 I0 r t5 Y
}! }! C2 Z! R7 }( k: C" e1 F
3 h' J: d4 Y- [/ i/ m% d; C6 R
syncUpdateOrder ();
* c7 V. t9 A5 X' ^7 Q
" \+ B" j) [# L' Q3 j try {
$ ^3 G, ~- E7 w7 w/ B/ K; }3 i7 {2 _ modelActions.createActionTo$message
; g- x5 x: u$ r, F T& X/ n (heat, new Selector (heat.getClass (), "updateLattice", false));
% L; t. Y K% C7 x } catch (Exception e) {5 l0 O9 D+ R& t' n( X
System.err.println("Exception updateLattice: " + e.getMessage ());
, Y7 Z( ?, P* ? }
/ Q' v% \% A4 C; s# T- _* B, d0 E
! h* R: t6 n7 \ // Then we create a schedule that executes the2 Z+ B* n6 w) D# Y4 K$ U3 G( ~
// modelActions. modelActions is an ActionGroup, by itself it
% D+ X( k* l4 w( c // has no notion of time. In order to have it executed in
* J! E8 X2 z! G) f; }2 R, o& l // time, we create a Schedule that says to use the& d& y- z( q" O
// modelActions ActionGroup at particular times. This' \5 q9 |" E: G2 A
// schedule has a repeat interval of 1, it will loop every
" g H9 V2 V5 N+ [5 i$ V // time step. The action is executed at time 0 relative to9 ?/ A3 X( D9 o4 W$ h) R$ B
// the beginning of the loop.! S9 J) h L; e* c R
G) f9 B/ x) {) _6 v& S3 f
// This is a simple schedule, with only one action that is
$ n. ]- P/ l# D) |' I- K // just repeated every time. See jmousetrap for more1 e, F. V6 Z/ P0 Y9 N) N. p0 v
// complicated schedules.
# |) x' G/ d' s, q# G: n 8 n" \, v; T+ m. r0 F' u
modelSchedule = new ScheduleImpl (getZone (), 1);
' w+ L/ {2 y/ \8 K modelSchedule.at$createAction (0, modelActions);1 T* Y& y2 E7 @# L- N5 v
g( Z/ c; ]1 e- i* o2 a& F6 a6 Z return this;
+ J- h6 d3 U4 N* ]" [- j } |