HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. E' X2 R/ G6 ?$ ^# ]
6 o, }3 ?& k; F' Q3 I3 u: L+ N% V public Object buildActions () {
( V* o/ ~1 s. ?9 O! t- l" S1 [ super.buildActions();
4 B% y2 x( J) K) _8 ~ : A- T( F4 L8 b2 K9 ]
// Create the list of simulation actions. We put these in' j( v. ?! G+ T9 ~
// an action group, because we want these actions to be5 V6 m; J5 e' {. R; W
// executed in a specific order, but these steps should
6 r' B( O& A' E7 }; J( b0 V // take no (simulated) time. The M(foo) means "The message
4 ]. T- W- v9 t- U9 O$ m // called <foo>". You can send a message To a particular" f) ~7 z D/ S4 T% i3 u( Z0 h
// object, or ForEach object in a collection.
3 O6 H7 H# k" ]( r9 a# s6 C4 @! y/ ~
O0 A) d$ w% O3 F- E7 V // Note we update the heatspace in two phases: first run( j0 C S5 v x. P' O, ^9 k( [
// diffusion, then run "updateWorld" to actually enact the; h0 h, e1 C! ^. f9 q" O0 K
// changes the heatbugs have made. The ordering here is3 p3 x$ `* T6 c% D# S5 P
// significant!( ^1 }/ D% v9 w- P* c
( R0 f a- F* d" L% X- j9 @7 H' `- C // Note also, that with the additional" N5 B B: P* Z; r$ D9 `
// `randomizeHeatbugUpdateOrder' Boolean flag we can9 N5 ^9 m# I' h
// randomize the order in which the bugs actually run
, Q) L# z% k5 H- ~' n5 q( @: e) _ // their step rule. This has the effect of removing any
" ~: a7 l: @' @2 W# Y; \+ m // systematic bias in the iteration throught the heatbug& Z, o* s" N8 C" ^# h# O Y/ B( I
// list from timestep to timestep4 V0 O2 x/ i" W3 ^
1 c. n( J0 U- B; z2 ~$ c
// By default, all `createActionForEach' modelActions have
, e' O) v7 S& K$ c+ q' a, C4 } // a default order of `Sequential', which means that the. S% Y+ [4 r. a! B3 ]: _
// order of iteration through the `heatbugList' will be( b5 i$ \2 W) Z [1 Z* e" {
// identical (assuming the list order is not changed
1 b) t9 Z$ h7 s0 j/ o // indirectly by some other process).& c7 u+ _6 s3 y0 L% I7 a, Z7 i( T
! r o7 _% h8 q$ h, C modelActions = new ActionGroupImpl (getZone ());
) R @% F# }" c8 b+ O8 G
: F/ Y; @; H4 n try {
. O& t( \2 Z( F/ f modelActions.createActionTo$message
( z6 q& H$ u" I1 K% |- I% i) S (heat, new Selector (heat.getClass (), "stepRule", false));3 V' |: h9 q3 J N- L; k8 e3 x
} catch (Exception e) {( T$ e5 B3 w5 @6 Q
System.err.println ("Exception stepRule: " + e.getMessage ());
6 W4 J; f2 o4 p! a ` }
; J. a6 w( j, w9 W* G% L m8 \6 A
* Z, M% R5 W/ H: ~* @" P try {
9 Y7 X3 h) M6 S6 v b) w Heatbug proto = (Heatbug) heatbugList.get (0);, ^$ o# Y! v9 ?+ Q% O
Selector sel =
1 ^8 T- b5 S3 r' [. D new Selector (proto.getClass (), "heatbugStep", false);
2 K) }/ g2 c: |/ r$ `+ m actionForEach =2 a& K3 J& l$ _: F0 p
modelActions.createFActionForEachHomogeneous$call8 r0 h- M, m, A
(heatbugList,
6 T9 U% l- B+ T" t, z. H8 f new FCallImpl (this, proto, sel,
8 y5 A0 L. \4 ^3 L7 z& L. G new FArgumentsImpl (this, sel)));
7 ^; X4 J# F( D$ {' }: B. r6 B } catch (Exception e) {$ h1 w- `/ K4 x7 I
e.printStackTrace (System.err);1 L, z- ]* L. b: X, x
}! T& U3 m: I+ x1 G4 k
$ o1 b L9 i3 m5 ?/ K4 v syncUpdateOrder ();
+ Y s1 R z2 J, {/ q: h" |3 u8 ?8 D2 Y4 J3 _/ ]; R! n- X0 B
try {
7 _+ S! B& S5 M, y2 ]1 x* G& N modelActions.createActionTo$message
E# D, O o+ P4 e (heat, new Selector (heat.getClass (), "updateLattice", false));$ l. E' D# ~2 r4 d$ l/ q5 [
} catch (Exception e) {
( x8 r' S4 }! }' h# s/ G System.err.println("Exception updateLattice: " + e.getMessage ());% C3 k4 ?( ~' Z, t) ?
}
$ z3 ]+ C" d u2 U& J 4 h$ U# o8 o% T6 J# p' J0 Q
// Then we create a schedule that executes the
# z7 z( C5 T8 i) p# i [ // modelActions. modelActions is an ActionGroup, by itself it
, d$ C3 ~2 S% ^$ f: y! V+ U5 c // has no notion of time. In order to have it executed in
) Y& b/ S2 `# `. _7 `+ P! g( b // time, we create a Schedule that says to use the
) o' X# X! o0 G% r0 G Z' T9 M // modelActions ActionGroup at particular times. This
2 h9 V, d4 D# B7 ?! g // schedule has a repeat interval of 1, it will loop every
: A# Q: D- z. x1 S+ @+ \2 I+ O* s // time step. The action is executed at time 0 relative to0 a2 o! \: ]$ g5 {9 K4 }5 d
// the beginning of the loop.2 l( z) C' Y7 ?. \8 N9 E! I. K
( H$ X( O ^& r3 [; U8 z
// This is a simple schedule, with only one action that is
: v+ g+ [3 ~4 M$ Y# |9 F) ^ // just repeated every time. See jmousetrap for more: b! }. L4 C1 o6 `
// complicated schedules.
& \1 m" W5 \$ h( X. O5 C1 Y! h0 }( V
" V7 {; [( C. |" ]9 _" Q modelSchedule = new ScheduleImpl (getZone (), 1);! H% n+ ^7 G- M& G8 ~, {* Y% ^
modelSchedule.at$createAction (0, modelActions);+ X7 W8 j$ B; M; M0 k" Y6 _& n
$ r5 L8 g/ |* [0 O7 D
return this;% `2 ?( @4 N: B0 u a6 q5 z0 m! M
} |