HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, N) ^2 j6 f2 a: k( n7 x. j1 f3 q Z$ G
public Object buildActions () {* i/ z6 W: H! s) |6 C Z' b
super.buildActions();
+ ?8 G- W4 V$ W3 L* K' A, R
7 Q3 J2 C- n3 Z // Create the list of simulation actions. We put these in
5 ~8 |8 @6 y4 {/ _ // an action group, because we want these actions to be
j3 `: m$ j U! E( V // executed in a specific order, but these steps should6 n5 B( z: s8 W* T, T4 [$ |
// take no (simulated) time. The M(foo) means "The message
, N) k& B/ q" y$ M( g( f3 e // called <foo>". You can send a message To a particular/ h4 v6 q3 H# G# p
// object, or ForEach object in a collection.2 f# R( y( `1 r: b; ~9 X9 h- w
% F# n2 f, V9 {5 L // Note we update the heatspace in two phases: first run+ M. u& g. a+ a' a& P
// diffusion, then run "updateWorld" to actually enact the+ {8 F! I4 ?- h! g+ L" M
// changes the heatbugs have made. The ordering here is+ O9 ]! V; v+ Z( g
// significant!/ d& B/ \1 R- K9 h- _: d/ o
1 Y1 c& U M/ \6 N // Note also, that with the additional
! I5 S+ L5 @0 i. E, `. M7 F1 k# r // `randomizeHeatbugUpdateOrder' Boolean flag we can
! v- V$ r' G* W+ g$ d4 W // randomize the order in which the bugs actually run/ e& z! {+ V8 F2 m; O* ]+ a/ Z# M
// their step rule. This has the effect of removing any( H/ M, m/ Z0 ~+ D9 P
// systematic bias in the iteration throught the heatbug3 F3 _7 S, `" ~$ g
// list from timestep to timestep
/ w0 C8 U& H# A1 ~- b! F
9 b w8 B4 l* c# Q" G, D+ z // By default, all `createActionForEach' modelActions have
4 b2 h' B8 L- L // a default order of `Sequential', which means that the
* Y: f0 l: S y# y // order of iteration through the `heatbugList' will be. Z. J' @9 O# V/ b3 Q1 c& \
// identical (assuming the list order is not changed
0 n( h, o# F; ?9 H2 {. z) Y // indirectly by some other process)./ {' U$ o' U9 F. G3 w; g. e
+ _) O: ^. q2 M$ O+ `* E modelActions = new ActionGroupImpl (getZone ()); g1 m: H3 f5 n4 _( W6 O" \
Q- U. X6 H$ ~5 a! {' w+ O try {6 y' i0 t8 ]) q
modelActions.createActionTo$message
/ a" ^$ |& u4 E3 a* N (heat, new Selector (heat.getClass (), "stepRule", false));0 u. J- v* H* U4 O
} catch (Exception e) {
% n$ \* w4 ~5 [) ]3 P, r1 |/ D System.err.println ("Exception stepRule: " + e.getMessage ());
0 u1 h# F: S0 ]( z' d" O }" j* t6 ~* O; a% b* j
' u# q8 t: B: J! U' [4 t# E try {
1 ]6 J3 Y! L" g1 C" ?8 [$ ? Heatbug proto = (Heatbug) heatbugList.get (0);
+ w0 i: L& j- _* Z7 G: N) p$ d$ j! H Selector sel = + ], J3 ?+ H3 X* a$ |" Z; V
new Selector (proto.getClass (), "heatbugStep", false);( `0 d" E D# l+ }7 k: e4 r0 W
actionForEach =. n; b, @/ N) I- f0 r
modelActions.createFActionForEachHomogeneous$call
4 j7 P, q' _6 [1 y* @ (heatbugList," Z7 m4 ^6 A9 V! X2 j; F
new FCallImpl (this, proto, sel,
; `' u- l! y1 x) r new FArgumentsImpl (this, sel)));0 B& V3 H/ S9 U; I
} catch (Exception e) {$ }! o8 r, B; |; ~
e.printStackTrace (System.err);
" r/ I( F$ d' q! `7 b5 o1 e4 `, ^ }
, m& {& M! O& u
! u$ I# o8 x9 |4 R, e6 O3 ~ syncUpdateOrder ();
! Q+ j9 ]9 i: W9 R+ ?1 s# l- l4 _3 K @1 ^& b z- m. G u3 u
try {
) O) q6 Z( x5 B- m0 C+ _3 Y* @5 R( X1 z modelActions.createActionTo$message
7 [6 F5 U5 y q& D" P* {- Y# a (heat, new Selector (heat.getClass (), "updateLattice", false));: O; d$ v. a3 N
} catch (Exception e) {" q: T! Z$ j! _ H% g
System.err.println("Exception updateLattice: " + e.getMessage ());7 ^% [/ q( y& V- j S! M# N
}5 g( m( J5 e* k% [! a( _
% E/ O) }5 h9 P6 } E* W2 q' d, ` // Then we create a schedule that executes the" j: V6 o" S1 D# I, U
// modelActions. modelActions is an ActionGroup, by itself it
# ^" C2 P. ]+ }& n // has no notion of time. In order to have it executed in3 p/ @# i/ G! M0 N1 |
// time, we create a Schedule that says to use the* }9 b# G! ~$ U4 y; U# Y0 D
// modelActions ActionGroup at particular times. This* ?3 @0 j# T9 t6 g5 G
// schedule has a repeat interval of 1, it will loop every
8 P2 D( w9 U% v$ j // time step. The action is executed at time 0 relative to
/ q3 [3 @8 |9 t, n // the beginning of the loop.
& U* m2 K: o: c5 J, c/ h: D2 {: M3 n' H1 d- ?
// This is a simple schedule, with only one action that is+ p2 c& y% U7 l" L; u% {
// just repeated every time. See jmousetrap for more
& G1 h8 d* s. d // complicated schedules.% \9 k' \ Q. K p1 ]5 M3 v/ h0 \2 h: P
! }4 I; h F) v/ ]& J" Q( u! J# X modelSchedule = new ScheduleImpl (getZone (), 1);
8 J9 f# A/ b) d; u3 ?, ? modelSchedule.at$createAction (0, modelActions);
2 M5 |0 g- u _& K* E$ ?9 F # U) C# }( j7 j* l
return this;( b( d0 R/ L7 I m) S
} |