HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- c7 ~4 A$ @* A" _ m
7 k2 Y' k1 D4 a5 }5 i public Object buildActions () {' z1 ^7 ^4 O$ r
super.buildActions();; y% M4 W7 \# f- \ ?6 e) g
; a% O2 x' I& @ // Create the list of simulation actions. We put these in+ e# p) x$ R/ x& Y3 V
// an action group, because we want these actions to be
' _& ^0 Q# G; ]6 h& q, X* s // executed in a specific order, but these steps should5 b0 {. N q' Z2 U k8 u z! f
// take no (simulated) time. The M(foo) means "The message
' i! r! ]$ `3 N' Z( K( l* V // called <foo>". You can send a message To a particular$ y: G6 O4 a+ J) D$ R- A* l
// object, or ForEach object in a collection.' t1 h/ {2 h3 R/ d* ]! Y- ^
" X0 l& A) G, A // Note we update the heatspace in two phases: first run
- I2 |. Z- a* [9 s // diffusion, then run "updateWorld" to actually enact the
+ O% u0 I$ n8 A# K( G9 I // changes the heatbugs have made. The ordering here is9 k/ x/ K* ~% I
// significant!" p" {$ v) X5 [, _
" V% r9 x5 \4 G t // Note also, that with the additional
7 ?3 M0 W& t1 i& m/ K+ g% c // `randomizeHeatbugUpdateOrder' Boolean flag we can
% g) |- f2 j* e+ @6 l8 n) V // randomize the order in which the bugs actually run
6 _. N& x) L1 q9 ^+ I // their step rule. This has the effect of removing any
- g5 |4 f: L5 M9 D1 K+ ` // systematic bias in the iteration throught the heatbug
3 b$ Y# g1 R' @' q( y // list from timestep to timestep
1 i+ e& Z$ g2 W5 X+ O" g3 e y1 z 4 p0 [& q8 {" b- Q- y4 x
// By default, all `createActionForEach' modelActions have1 A3 h& \! b, M$ |- v9 y I- p1 y
// a default order of `Sequential', which means that the
3 M2 p" T8 {1 }- }$ D // order of iteration through the `heatbugList' will be' |& F% x; Y8 b
// identical (assuming the list order is not changed& L' |4 Y/ Q; U4 R, E+ I% O# M
// indirectly by some other process).
+ E1 M2 ?; @, X/ z8 N* w' V/ Y ! Z- K8 M1 H6 j2 }/ F# J9 |$ G
modelActions = new ActionGroupImpl (getZone ());
6 o5 Y" Q; _; I2 W# i- X* C7 W) n6 ?1 {3 R3 p; n6 E6 f
try {) B5 T; `% K. \4 S) h" \
modelActions.createActionTo$message
% x. N1 B! x5 o$ P, E4 l: [ M (heat, new Selector (heat.getClass (), "stepRule", false)); Y6 T/ ]; r" ^ `# c
} catch (Exception e) {
2 Q9 N7 S- t+ u, {& [ System.err.println ("Exception stepRule: " + e.getMessage ());
: P+ S. ~( G" ~8 m5 M) \! [+ J }9 X. m' O1 Q Q" z0 ~/ ^! y
2 v# D( `- B3 z$ w. ^! e4 Z- X) `
try {
* z+ M/ y8 h0 o Heatbug proto = (Heatbug) heatbugList.get (0);5 }' ~6 P- S4 O4 i R; S3 y
Selector sel =
1 u- `. W8 k+ Q; H$ U5 x( ~( R new Selector (proto.getClass (), "heatbugStep", false);4 h8 z+ G* T2 V* x) h9 L: @
actionForEach =% P w- [% o7 {4 p
modelActions.createFActionForEachHomogeneous$call
D, o/ r" O: T5 `" _ (heatbugList,
% [2 Y& |1 s' f5 e x8 R5 r new FCallImpl (this, proto, sel,
7 _4 V7 Z3 ^% L% f new FArgumentsImpl (this, sel)));
2 x# ^, f% T% U9 p$ ? } catch (Exception e) {3 S% U# U- Z4 Q& D; b3 ]% g z5 Y
e.printStackTrace (System.err);6 ~! a1 y8 M; E, j0 w0 O( b' ?9 _
}
& R1 V8 x+ D3 j; s' U2 o
, Y# ]$ V: P, j3 P" ` syncUpdateOrder ();
8 o& e- T! n6 v7 l% R8 n% V# I& j, q2 p$ h5 v
try {
) H2 x: G+ y8 F- F+ h modelActions.createActionTo$message 8 B. J. G" N+ c2 \/ j$ |+ C' o1 d$ C
(heat, new Selector (heat.getClass (), "updateLattice", false));
1 [2 m9 S5 W& [6 L" B$ ]. V$ B3 T. b } catch (Exception e) {
0 ^$ S3 p) q0 Y8 Q! F5 I System.err.println("Exception updateLattice: " + e.getMessage ());
7 }6 V/ W& J | }
5 U0 [* ^1 l; K# S2 y9 n
% L/ X5 n" M) F& | // Then we create a schedule that executes the( [9 q% Q1 P, R3 B+ n
// modelActions. modelActions is an ActionGroup, by itself it5 V: a$ M. R7 Y8 ^
// has no notion of time. In order to have it executed in+ J# c4 f; X: c ?2 o
// time, we create a Schedule that says to use the
# L. i: U0 n% C3 o+ L- M/ w% \ // modelActions ActionGroup at particular times. This
! g0 ^4 d% ^6 U2 f // schedule has a repeat interval of 1, it will loop every/ U! y+ p( [% h! g& q% L) d6 S
// time step. The action is executed at time 0 relative to6 J" Q. y; Z# E e# |5 n
// the beginning of the loop.
/ o+ x' \: E @3 i O, I! b- x! a3 a, t: D9 z
// This is a simple schedule, with only one action that is
% ^6 E u8 c6 B- X' H# j+ k$ |8 D& e // just repeated every time. See jmousetrap for more7 e+ v/ E1 _* m9 Y: C
// complicated schedules.) l. P0 T ?# q3 C$ u
# c9 p3 A0 V) w1 w modelSchedule = new ScheduleImpl (getZone (), 1);% ^! c i8 ]" r4 O Z
modelSchedule.at$createAction (0, modelActions);
1 n' S; G# S+ J( C& x3 s4 J
( ]# H: e: Z! I6 A+ p, A# j. K+ {! }# x return this;
- k- F+ o% w Q; q' W. G } |