HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: B0 [' [4 G6 Y; ^; {
. Y4 R& A6 |2 d7 O K3 K9 q7 A public Object buildActions () { |$ q/ ~1 K- N. z' Y6 ?
super.buildActions();
: r, l6 a+ H1 a4 f: K
# @/ W/ J) G# G! |6 O+ d // Create the list of simulation actions. We put these in
4 x' }+ N% R8 _1 Y8 z2 P' l // an action group, because we want these actions to be- d( n. g+ K0 E2 N1 c
// executed in a specific order, but these steps should# m, Y- K! ]3 s5 z
// take no (simulated) time. The M(foo) means "The message
/ h1 n Z. D# @+ f+ h# |. P+ y // called <foo>". You can send a message To a particular
2 N) }0 \4 @2 Z" j6 O! h" T& G- l // object, or ForEach object in a collection.
2 \. @- k7 {+ Y0 O/ {# Y* Z$ ]8 e
7 a; E' l9 H" Q2 S7 V1 Z6 q5 x // Note we update the heatspace in two phases: first run
$ q2 `9 S$ _4 P1 ^9 E // diffusion, then run "updateWorld" to actually enact the- F* V! ]- h4 o
// changes the heatbugs have made. The ordering here is ?9 D+ s2 j6 O! Y
// significant!
3 o! w( B5 u- s0 w- X" b, J
$ q* |9 h2 C+ t# ?/ T8 } // Note also, that with the additional
% N" t1 Z% z- ]% @ // `randomizeHeatbugUpdateOrder' Boolean flag we can
) T( C4 V* J% ~; G0 ?' k, n // randomize the order in which the bugs actually run
; S7 |6 l7 v, B4 {& m* S' H2 R6 ~ // their step rule. This has the effect of removing any S$ U$ B2 C% v' M, t" y- a" u' l
// systematic bias in the iteration throught the heatbug
. J. U) n$ J! t; S1 W) C& Z // list from timestep to timestep' v4 B0 r+ w F" M! L9 G
' X! A) ^/ A$ Y4 l* U" z
// By default, all `createActionForEach' modelActions have5 `8 n6 X+ y* K: y0 u
// a default order of `Sequential', which means that the
4 Y$ n; _$ e }/ j8 k- R9 D- v, P% T // order of iteration through the `heatbugList' will be O6 W$ e/ H/ E- W9 j r
// identical (assuming the list order is not changed
* k. w8 s Z$ t7 h5 ^ // indirectly by some other process).* O% \* \. P" d3 _/ g
1 ]6 J7 k6 v/ K) o/ b
modelActions = new ActionGroupImpl (getZone ());0 f! X. S" C" D5 d9 @4 S+ {
$ x5 l0 `- K! q) B' X
try {
$ s/ T8 P- G, Z+ r modelActions.createActionTo$message
/ L1 @! O! [8 h (heat, new Selector (heat.getClass (), "stepRule", false));' V7 S' P" A) ^2 c% [9 V1 D! X
} catch (Exception e) {
5 \* `3 D$ v0 r' i. M; Z* n) Q System.err.println ("Exception stepRule: " + e.getMessage ());
/ Y z4 Z5 `- M( |0 U }$ J) i- N* F' n& u
4 o/ O; M; y @$ A2 I4 r( y
try {
! N% L3 @' r- J# E$ a4 S$ l( i+ u( L Heatbug proto = (Heatbug) heatbugList.get (0);9 Z R+ G+ k3 F1 @) Y
Selector sel =
' e' i; H1 G# k4 v& i4 I1 w new Selector (proto.getClass (), "heatbugStep", false);! Y+ J; K0 S7 o) J
actionForEach =
3 I0 M/ O8 g* s2 x) l0 o modelActions.createFActionForEachHomogeneous$call
7 w6 }6 V4 \. z9 @ (heatbugList,# Q3 a3 f* X. M; ]
new FCallImpl (this, proto, sel,
3 Z# _3 s; X! T2 K% j1 ^' u! P8 D new FArgumentsImpl (this, sel)));( P0 ?, z, H g
} catch (Exception e) {
4 e/ L& \2 V, F e.printStackTrace (System.err);+ ^0 ^% q6 ~' K. I
}
; q6 [% U% w3 t( ]
% i' D) G* M0 y3 L8 e3 a( S' \3 k syncUpdateOrder ();
; y- A9 B6 H6 x( _
; V# d, g4 K' c2 e2 n/ L4 A try {% j$ ~! h% O7 @) k0 B1 r
modelActions.createActionTo$message
; N3 a( P6 l8 \! o+ Y (heat, new Selector (heat.getClass (), "updateLattice", false));5 d* h$ O1 p @* f+ S
} catch (Exception e) {# [! q) g; ?; O. P L3 C2 K* q& G9 [
System.err.println("Exception updateLattice: " + e.getMessage ());* U0 s3 z+ |! b
}
2 g1 ?: s! \3 \ ) {: Q% N" `; X0 D/ `+ E
// Then we create a schedule that executes the4 F @5 o+ Y$ e7 A2 r# _
// modelActions. modelActions is an ActionGroup, by itself it
) M) | e" l- I& t // has no notion of time. In order to have it executed in
6 x( A5 p8 \3 `8 i) V$ j0 J // time, we create a Schedule that says to use the' P% o6 G0 F, f7 g# Y) W
// modelActions ActionGroup at particular times. This
0 s0 N4 d. b3 s8 ]5 _ // schedule has a repeat interval of 1, it will loop every
, b) s7 I5 k9 J5 G5 w3 l8 \ O- e# Q // time step. The action is executed at time 0 relative to
7 ]% |4 h( ]" r* I // the beginning of the loop.2 _: {. z( T1 @0 @* } a8 W( N# x4 a$ B
. l' f! A; m% Y4 A& B9 h // This is a simple schedule, with only one action that is1 g. }. t' c0 s6 |0 ^2 e( W0 M
// just repeated every time. See jmousetrap for more
" }% Q" I! V/ p" I // complicated schedules.* @1 u* [4 O# O: p3 K& L& B2 p$ G
& F$ U1 V" o1 _4 s' H+ v modelSchedule = new ScheduleImpl (getZone (), 1);% q( I) g; }$ z3 Y
modelSchedule.at$createAction (0, modelActions);6 j# |2 T# C& ~+ j2 F) D0 z
3 _; q* _; Z: K$ o% s1 ~+ _7 X' U7 N
return this;9 Z; Y2 e7 v' ]2 p- E ^: g+ |
} |