HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 n( G( G) a, K W; w& Q' |
, U [- d7 J; q; m' `
public Object buildActions () {/ R! d1 B ^! A5 c: C ?* p2 P8 i
super.buildActions();# K ^7 D+ k8 i, B0 Z4 s
1 E, z( P$ p9 l. z
// Create the list of simulation actions. We put these in
- Z' c7 Y/ |/ P2 w% D+ ?2 z/ F' ? // an action group, because we want these actions to be
8 t" @1 d1 l: \2 q2 V+ M# U, C4 y% s // executed in a specific order, but these steps should- {- f7 ]4 T7 u
// take no (simulated) time. The M(foo) means "The message
& A5 h/ U( y: Q // called <foo>". You can send a message To a particular
+ ?+ q ]1 \2 r7 X/ q; f // object, or ForEach object in a collection.: `1 }+ |! `$ o* o1 c
1 ?2 ?! G5 E; {# S+ K9 U. _ // Note we update the heatspace in two phases: first run
# @; l6 N9 g3 z3 D8 | // diffusion, then run "updateWorld" to actually enact the
. h1 W. l' g4 E0 {4 t // changes the heatbugs have made. The ordering here is
& R* I" x5 ]7 {+ V2 j4 ?* N // significant!
1 N! R5 X: J" P" P $ t) s% W3 q' g. V3 ?/ i) G
// Note also, that with the additional3 F1 ?6 ^0 [3 X" Z8 P. H
// `randomizeHeatbugUpdateOrder' Boolean flag we can
! K5 g7 l$ Q) n% t // randomize the order in which the bugs actually run- ]: l) \7 H$ s$ C& R
// their step rule. This has the effect of removing any+ ?4 G& p, t6 G# ?+ g; i& `7 t
// systematic bias in the iteration throught the heatbug
, S+ M" w! z- e+ F. ~' [4 G // list from timestep to timestep
. ?0 k2 C% u8 `. @/ G# W 0 B$ W9 s& u9 a7 N9 @
// By default, all `createActionForEach' modelActions have; ], M) Q! \# m
// a default order of `Sequential', which means that the
/ _. K: u# `3 a // order of iteration through the `heatbugList' will be
8 W {/ ^+ X) x4 P // identical (assuming the list order is not changed, K( i" b) a; X1 G% \0 ]
// indirectly by some other process)., [/ Z$ t" e: E0 A
* C, Z! e% L4 O5 Z p7 K7 \
modelActions = new ActionGroupImpl (getZone ());" z7 ]' z! S& J# x: m
7 ^* Z1 t- O" f, w+ [# a$ n3 G
try {
! C9 Z' E% ~* G, G* S5 V modelActions.createActionTo$message( R6 M5 J1 e' k1 Q Z
(heat, new Selector (heat.getClass (), "stepRule", false));+ T2 P- h* O6 P( Y7 c$ b" x
} catch (Exception e) {; K$ C* [; O1 B+ r# i
System.err.println ("Exception stepRule: " + e.getMessage ());* G/ C* B- s8 }3 r! A: h) x, ~
}% H$ K& f: x- ?3 V9 Z3 [. u
8 E9 }( z4 M2 n" x+ ?
try {
! U: j `% ~4 \4 O1 P1 |+ r; O: \ Heatbug proto = (Heatbug) heatbugList.get (0);
9 T' R) W' @, S0 B: _' L* i Selector sel =
6 ?) p' G* `! j$ D. K% t" s new Selector (proto.getClass (), "heatbugStep", false);
- e' t, L$ R+ |3 n( X actionForEach =" z$ M. |1 Y5 U: F* ]" k* n
modelActions.createFActionForEachHomogeneous$call
" I# S6 u' i0 h7 j6 S (heatbugList,
) u$ J+ g e' U new FCallImpl (this, proto, sel,0 H$ F# {+ w: U; A
new FArgumentsImpl (this, sel)));
1 A; ^, ?" v) d$ y# v4 y } catch (Exception e) {- `5 ]* X! b2 x% H& H3 A
e.printStackTrace (System.err);" u. H" s% ~+ l$ h
}
& P- B* u8 O) f1 T V3 W
& {' ^1 b0 R+ [$ W syncUpdateOrder ();+ ^6 { c: C+ M
2 L6 j L. _4 \$ _6 |2 |
try {7 p$ U6 C# j3 M* o. S+ [ u! K6 G
modelActions.createActionTo$message
3 \( [* |: E) D& i* y, b) P (heat, new Selector (heat.getClass (), "updateLattice", false));
+ b% p9 D0 H0 f8 \/ c t } catch (Exception e) {
. Q; q9 `$ G! X System.err.println("Exception updateLattice: " + e.getMessage ());
* v' {$ T5 s4 e9 m, x }/ y% s: q+ f- U+ P
9 [/ v$ e9 J* C+ \, ?8 B // Then we create a schedule that executes the
. H8 }& j0 {4 |9 Y+ F! I // modelActions. modelActions is an ActionGroup, by itself it
N+ e4 r2 b% F) ?% F // has no notion of time. In order to have it executed in* Q" v P. f0 m* c* ]6 r
// time, we create a Schedule that says to use the
; W* M1 I) a* K // modelActions ActionGroup at particular times. This
t0 t( U/ N: M- g8 n // schedule has a repeat interval of 1, it will loop every) t$ M' e7 v9 k9 L3 L
// time step. The action is executed at time 0 relative to
3 d3 m7 O6 `/ w! E3 [) l' z // the beginning of the loop." w& n9 ^* h7 k' P, g/ b1 I
! g: p, R# O, O* z! w
// This is a simple schedule, with only one action that is! C% w( { _% ?
// just repeated every time. See jmousetrap for more
. d$ c9 b; x0 O8 ?9 | // complicated schedules.- Y) g4 y3 b' i8 |( o5 m9 ^
3 S# L3 y2 ~4 m. C1 t, d8 `/ N' }! A modelSchedule = new ScheduleImpl (getZone (), 1);; Q1 H. [, w9 G* p- E6 b
modelSchedule.at$createAction (0, modelActions);
9 U$ I( m2 @* l7 n# H/ W2 F1 ` - e$ a+ U% D8 b5 e8 m
return this;3 p/ N0 j6 V6 d. {0 ~+ y* e- L z
} |