HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 y5 ^2 D$ ?* j- o I4 `& z; w% P
public Object buildActions () {
: C2 Q* w# C6 j* F# Q$ _9 ]8 l! U super.buildActions();; i% s- `( v6 G$ l1 x
/ v) ?( S7 u" s% d7 Q
// Create the list of simulation actions. We put these in
: I# K) \) |) M6 u- }7 T6 P( e // an action group, because we want these actions to be3 h5 W# T% o; `: ~& K
// executed in a specific order, but these steps should
" n# A- _2 S7 f7 Q$ `2 b // take no (simulated) time. The M(foo) means "The message1 S6 G. p6 `+ m
// called <foo>". You can send a message To a particular
, w. r& H+ }$ K) l2 x- J // object, or ForEach object in a collection.) N6 m, @* p G
_/ m4 }& w7 Y9 Y6 x
// Note we update the heatspace in two phases: first run
. H+ u |3 {! a" T }- s5 n: z$ Z // diffusion, then run "updateWorld" to actually enact the" C; p. o* y( [. n1 I& i! |
// changes the heatbugs have made. The ordering here is7 P4 J. H# e I. F
// significant!8 k; S* b, G" t( t) y2 a
7 \8 P1 J- x/ d: |, B. p // Note also, that with the additional
8 J9 W ]& P2 l0 | // `randomizeHeatbugUpdateOrder' Boolean flag we can3 V, U2 t" s. O4 O
// randomize the order in which the bugs actually run
; a, A* g4 E8 h6 X // their step rule. This has the effect of removing any. q) B# ^# A- q3 b0 y2 v6 x
// systematic bias in the iteration throught the heatbug
# V/ M; Y- Q! C3 n# r/ B // list from timestep to timestep9 E0 H$ s( v: ^. o( n
$ E& k& J! K9 E2 A' T
// By default, all `createActionForEach' modelActions have6 S6 t3 r& D# R3 R8 M) y4 u
// a default order of `Sequential', which means that the
* D1 R4 u9 P8 L* r9 Q# ? // order of iteration through the `heatbugList' will be' y+ ^% |0 R7 w' ^, x+ ]1 p) }
// identical (assuming the list order is not changed
, M, @, t+ y( J) S# O // indirectly by some other process).
! {4 }) S' G" j5 [( A7 k* x / Y4 t- S. P6 }' N0 k# @
modelActions = new ActionGroupImpl (getZone ());4 V0 z2 j0 I7 [% b
. e3 r |- P$ q! U. \; e7 X
try {6 ?# d9 R9 c* m4 B
modelActions.createActionTo$message
4 {: x3 K2 K |2 J* @ (heat, new Selector (heat.getClass (), "stepRule", false));1 z; k4 ]0 c( b2 `/ c+ y
} catch (Exception e) {
: I7 B. f: u+ A8 R( T7 i System.err.println ("Exception stepRule: " + e.getMessage ());( k; w6 h" o- W
}' [$ H- p! {( R
0 [4 M& i+ r4 ?/ {! q
try {
, a% m0 @/ d5 p) \/ { Heatbug proto = (Heatbug) heatbugList.get (0);4 L/ ]% N0 U6 q& X
Selector sel = . u" {+ V2 s; M; y7 \# g
new Selector (proto.getClass (), "heatbugStep", false);1 M7 e; M J& g! x5 q0 `' b5 Z
actionForEach =* A& h* r) a; t3 D9 G
modelActions.createFActionForEachHomogeneous$call
6 ?( P4 I; B$ G- I* v (heatbugList,$ Y& u, A: P2 V/ _5 ^
new FCallImpl (this, proto, sel,7 v2 i' \6 Q7 k( \/ S0 A# r) z V
new FArgumentsImpl (this, sel)));) c4 }4 M) \# M. B( {- P: W; O2 }( n
} catch (Exception e) {2 z1 h; c4 s' I' V2 U
e.printStackTrace (System.err);2 U w; a h' ]5 i+ A
} [; k' G6 Z6 R$ ?& {- {/ j
. @! e( U" C$ c1 ` syncUpdateOrder ();
) A! g, y7 z; Y# y3 b7 a
X& w; f4 k- b& _+ s4 c/ | try {- X5 Y5 T* U6 q
modelActions.createActionTo$message
6 }/ e& f" `0 e7 A (heat, new Selector (heat.getClass (), "updateLattice", false));5 }3 _4 W t4 ^8 r Y
} catch (Exception e) {
! [4 C+ s3 p. V3 J4 J) f) ^0 w System.err.println("Exception updateLattice: " + e.getMessage ());
! A% y1 o9 `3 n3 a' M* ~ }
! ^0 F3 l% _+ ?+ V- c% o, a! j7 l , r: P! u4 u, t; u1 e" J* Y
// Then we create a schedule that executes the
, E/ U! n* i1 E, u# i! o( g+ R // modelActions. modelActions is an ActionGroup, by itself it
5 t3 X) S! }7 }- h) k5 R7 i. P; X // has no notion of time. In order to have it executed in
; ~$ G7 ?4 r9 {6 z `; u // time, we create a Schedule that says to use the4 m: `/ G7 C- |! z4 `! o. ~) w9 J
// modelActions ActionGroup at particular times. This% _9 Y( H. K: ?: x# B& a
// schedule has a repeat interval of 1, it will loop every" f4 I, ~' |; m' J
// time step. The action is executed at time 0 relative to
; y5 \5 o2 S& o, m // the beginning of the loop., k1 k: d8 ^4 I2 l5 n
, @+ E Q+ s, Z1 k9 Z: ~- Q // This is a simple schedule, with only one action that is$ h/ ]' K* s$ K% S) L1 z
// just repeated every time. See jmousetrap for more+ S1 N I9 ^6 @/ F
// complicated schedules.
9 P/ F$ N% D% v* y& X$ H
- q/ B/ H- q# K2 C4 P4 H; }1 n modelSchedule = new ScheduleImpl (getZone (), 1);+ E( Z- }$ F" {* G0 L4 n
modelSchedule.at$createAction (0, modelActions);$ A" |6 W, R3 G1 E, z' q
, Z2 v6 ^6 F$ z3 O7 R- y return this;+ j& D# d% V6 F, [
} |