HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 R5 E! M" _ b& w- t4 s3 n
$ }. ]9 {$ ^* V- a0 R; d public Object buildActions () {4 a" c0 }/ e/ K9 g
super.buildActions();3 ?# v8 }) X( B- u) B$ z! q
, I+ Z; ~4 S/ F // Create the list of simulation actions. We put these in E3 p/ C% [ t4 p" ?
// an action group, because we want these actions to be
3 ^& P" ]% W3 @4 t, z S6 Y* P // executed in a specific order, but these steps should
5 ?5 ]/ P) r; j0 f1 ]; i5 K0 } // take no (simulated) time. The M(foo) means "The message/ o, h9 b1 c; H# |8 F4 `
// called <foo>". You can send a message To a particular
: z$ ~& v! J6 {0 b2 { // object, or ForEach object in a collection.
! q, l' e6 v7 ?# l 2 w! f; G; ~! y
// Note we update the heatspace in two phases: first run1 ~, ?! P4 G( y& {4 N) g
// diffusion, then run "updateWorld" to actually enact the
. D [, H9 \1 t" H // changes the heatbugs have made. The ordering here is
- W$ h, Z0 A& U9 d. r; t# | // significant!
- i# w5 }) f1 A& p2 _: o
3 C$ Q" a1 w7 }/ Y. O // Note also, that with the additional5 b5 z( D. u. f
// `randomizeHeatbugUpdateOrder' Boolean flag we can4 j; n. W0 W5 I% z" i# F4 E
// randomize the order in which the bugs actually run; |) ^4 _" w/ P2 z3 B- v4 p- k
// their step rule. This has the effect of removing any9 e4 L: M7 n, y7 i* Q
// systematic bias in the iteration throught the heatbug
8 V4 o) n5 s5 P' h# X" {8 a // list from timestep to timestep
0 [+ \# W0 p0 ?+ E5 C9 q4 s % j8 Z7 i! W) O6 |1 U
// By default, all `createActionForEach' modelActions have' | i, O! e, W- E) k4 \
// a default order of `Sequential', which means that the7 d8 N" ^ z/ m4 A4 o/ ?( y
// order of iteration through the `heatbugList' will be
8 {- z) L- b$ ?% B/ ?+ d0 u! H# S2 s& m/ D // identical (assuming the list order is not changed' P# k" ?* w5 s% f. H. a
// indirectly by some other process).
" Y, y+ ?+ ]. V0 Q! `
, |7 P2 ` b8 W) }: d: o6 S modelActions = new ActionGroupImpl (getZone ());
y' G# J+ `9 W- E
7 h6 ]* B5 Y; Z" ?- c- ?. m try {
3 |" a: i6 v" s0 b1 a3 I( k; `% ~ modelActions.createActionTo$message
^* b! R' Z# [7 \ X5 c5 [ (heat, new Selector (heat.getClass (), "stepRule", false));% |4 d. s( @# `$ C/ ]$ N( D
} catch (Exception e) {: d1 ?4 H1 l9 u
System.err.println ("Exception stepRule: " + e.getMessage ());" t5 F ~: r: e# A* U# }3 p) C
} V( x7 C4 f R: `7 | r, H
8 `$ O7 U( x A& P( Y* @5 s try {) V- o ^+ q$ B5 e
Heatbug proto = (Heatbug) heatbugList.get (0);
f( f- k7 A/ N& j7 Q# ~8 x# M1 ` Selector sel = 5 R" O6 m7 Y; n2 Q. r, M z% U
new Selector (proto.getClass (), "heatbugStep", false);
4 V4 [* ]3 b* V$ [, Y( v actionForEach =
( f4 n! r7 k2 e modelActions.createFActionForEachHomogeneous$call
1 r/ M% G+ s* J/ K9 f- ~ (heatbugList,
6 Q# b9 Z* W. ?4 n% P5 }( N new FCallImpl (this, proto, sel,' `7 U# y9 Q- T& q2 [! F
new FArgumentsImpl (this, sel)));
6 `4 j0 C; g; g" X) Q } catch (Exception e) {; Z) \3 L. F) E3 L; Y3 Z) j
e.printStackTrace (System.err);
2 o, R- P) }0 R' t8 P* r }- M( x Q# x. M8 M8 l
' a: X5 Q3 [$ r syncUpdateOrder ();1 o5 f d$ ~' p& s8 H
$ D' O! M6 k3 n7 e/ W try {
. O8 f3 P H3 Q: Z* o modelActions.createActionTo$message 2 F* p* g7 `+ e! x( N) ?
(heat, new Selector (heat.getClass (), "updateLattice", false));9 U3 p ^ p) e* e
} catch (Exception e) {
; x- S2 h; V0 M% b2 ` System.err.println("Exception updateLattice: " + e.getMessage ());0 L: H# k: C) m# e
}
! N! P, ]; A1 o3 R. ~
+ y' P w6 R6 k( D: ]" a2 s% K- i // Then we create a schedule that executes the3 p% R, N: j# A* X1 @% Y
// modelActions. modelActions is an ActionGroup, by itself it+ K2 `% J G6 J5 K7 C# O$ T. k
// has no notion of time. In order to have it executed in
+ T/ g* H1 P0 I C* }- ?0 U. W // time, we create a Schedule that says to use the
6 B# T. N0 m a7 `- q6 A3 F. m2 P // modelActions ActionGroup at particular times. This
0 {' k: F; c9 ~ // schedule has a repeat interval of 1, it will loop every* w- F6 p7 t9 G4 Y! S
// time step. The action is executed at time 0 relative to9 Q1 l* x4 N- y
// the beginning of the loop.
2 b7 l, ]+ U* n( d% X; {, T( H! @& N' {
// This is a simple schedule, with only one action that is
/ Z# J4 a% t* a- `" A2 S; C( u // just repeated every time. See jmousetrap for more
( r5 R. w; t: T( U& F // complicated schedules.
2 c5 G. u* M8 s) P, U& b0 P+ { 3 V0 ]: f/ e' _8 s7 T9 e
modelSchedule = new ScheduleImpl (getZone (), 1);
, F8 M q0 N1 z z modelSchedule.at$createAction (0, modelActions);0 C+ O7 s& G( A
$ u& R" f' ?2 ^4 ~6 h0 O# T8 P, Q
return this;
9 g9 m) c: c% H% d- X) p } |