HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- l* C/ f4 I1 a' \9 F
- j6 K G; h) M& \4 k! ~3 k% t public Object buildActions () {
G0 l* F& T) H d super.buildActions();: N2 N. a6 S: f& A. g3 o
3 M$ X2 Y$ o& v+ w3 ]9 ] // Create the list of simulation actions. We put these in
2 [% ^$ s4 B3 [5 J3 k // an action group, because we want these actions to be
- M# S' f' U! P! v1 R8 _3 |. u5 i2 k" x // executed in a specific order, but these steps should: U3 [& G$ X# }$ J0 b- R
// take no (simulated) time. The M(foo) means "The message7 F G( U& M3 O& _- J7 \8 a6 z
// called <foo>". You can send a message To a particular
: k2 B) ~" N3 S7 G/ E // object, or ForEach object in a collection.# G7 Z* z! F$ H. V4 w4 V
' Y! H8 f8 c R3 m/ P; ~
// Note we update the heatspace in two phases: first run
1 n6 q: l ~$ W C" O( Z' k1 L // diffusion, then run "updateWorld" to actually enact the
, ]9 W0 G9 m! O F // changes the heatbugs have made. The ordering here is
2 b( p/ V8 p* W; W$ _& F( g // significant!
& Y# G' p+ ]/ l* n
% K- d2 m; x0 y, l // Note also, that with the additional' y* l4 f' P& G
// `randomizeHeatbugUpdateOrder' Boolean flag we can8 A0 \6 {3 y* c; e- L
// randomize the order in which the bugs actually run" a& g& Z3 f& _5 m5 ^3 I8 D& R
// their step rule. This has the effect of removing any
3 U5 x# M( Z3 B // systematic bias in the iteration throught the heatbug4 Z6 ?% [# M! m
// list from timestep to timestep
) w3 v! [ X2 _9 ?$ v9 j# ^9 t . |( l: T! Q, S) S( m
// By default, all `createActionForEach' modelActions have, \) l, t: y& c2 U2 k3 @
// a default order of `Sequential', which means that the) M0 h- {6 t: |3 @% Y- ]; o* R
// order of iteration through the `heatbugList' will be$ ~& E) l# m$ W& Q* i
// identical (assuming the list order is not changed
+ r6 L" \! z( ^# o e // indirectly by some other process).
! B- r& n* d4 Y. C2 W' G% t" F
+ i# M+ B- H* q" m modelActions = new ActionGroupImpl (getZone ());2 z) i; q1 h" _+ X
8 ~7 h3 }" u6 }0 W try {
5 K# O A$ k. \. r# p modelActions.createActionTo$message2 Z7 w1 c) o; ~: D! _6 {( U' u- C
(heat, new Selector (heat.getClass (), "stepRule", false));" P0 ?3 U8 ?6 s0 \4 P
} catch (Exception e) {" X- g* C9 v0 P2 t; b, Y
System.err.println ("Exception stepRule: " + e.getMessage ());
0 u# o" B& o5 T6 ?% B8 j* X }4 V% a! B' k6 W7 G& ^ O2 }; E
L! ]6 T; K: S6 G4 g try {
- o" q1 a3 e6 D9 T Heatbug proto = (Heatbug) heatbugList.get (0);
4 y Y$ h! A# C% d$ g/ q; X Selector sel =
, h- |! f8 l' W5 p3 P2 f new Selector (proto.getClass (), "heatbugStep", false);/ {+ K4 M1 l. P( Z# x- h
actionForEach =* r/ ~) q' G% C7 r: g
modelActions.createFActionForEachHomogeneous$call
# r1 F) b# S2 P6 H7 H" K (heatbugList,* `5 l: \8 O" ]+ p/ _
new FCallImpl (this, proto, sel,
4 n8 Y7 W' O8 c! @$ N! k2 V new FArgumentsImpl (this, sel)));( w. @, A/ r3 W$ Z" h f
} catch (Exception e) {
& y8 k( ~. g) u7 H1 A8 `5 P0 r e.printStackTrace (System.err);* E4 k- u8 W) x& }3 }0 _; l* G
}
9 {! B% x( j. v
0 A; b# o) k, ]1 Y* i, R syncUpdateOrder ();1 h% C9 {5 [8 F. J
; h. A+ A. g/ K2 ~+ m
try {4 X' U# \4 s, t1 O' R
modelActions.createActionTo$message
1 k/ m0 U2 X8 T( j5 u (heat, new Selector (heat.getClass (), "updateLattice", false));5 E; u) m5 a$ K
} catch (Exception e) {/ k+ l( H) {# g4 `# H
System.err.println("Exception updateLattice: " + e.getMessage ());
' V8 s1 p7 Z2 u' ^3 O, P0 m }. P0 y% h8 `6 j
) u& N( z7 R# N' R' q ]
// Then we create a schedule that executes the1 P* O) N5 Z4 h0 b
// modelActions. modelActions is an ActionGroup, by itself it, c1 H+ z! v- R4 w6 d8 U! b
// has no notion of time. In order to have it executed in# h" H2 v3 A L, ^' _$ i F
// time, we create a Schedule that says to use the
9 o6 N: b6 j6 ?5 J // modelActions ActionGroup at particular times. This
( \% L2 U) ~3 V- e: }0 B // schedule has a repeat interval of 1, it will loop every
+ ]2 C8 V6 [3 P. F0 c& v; j // time step. The action is executed at time 0 relative to9 Q3 w2 ~. c6 q2 e/ K
// the beginning of the loop.6 J! s- W; t. Z
& |+ h/ ~" L9 w
// This is a simple schedule, with only one action that is5 j% o9 ]- ^ E' n4 b# k
// just repeated every time. See jmousetrap for more1 x3 U5 s: e: H7 G$ k1 Y
// complicated schedules.
0 V9 f! K* q! z5 t" b( `6 j h) r
/ y/ E+ T$ h8 W modelSchedule = new ScheduleImpl (getZone (), 1);6 z7 h3 i. h- @' O
modelSchedule.at$createAction (0, modelActions);$ J; D+ Q7 y6 e% s) {) O* U
# o5 @/ M2 l X+ k, k+ Y. y% x return this;
( E5 v h, H8 ^5 J } |