HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& \5 k5 b6 c L6 L# j& ]9 X
# P7 B' m: t% k4 @; u public Object buildActions () {
+ d. ?3 ?9 Y- J( G super.buildActions();! q, W4 r1 k$ C8 i9 o$ q6 v* i
- P0 l/ p9 Z! n9 v# F8 U7 I
// Create the list of simulation actions. We put these in
5 N/ _% W+ m/ g // an action group, because we want these actions to be, {1 F3 l& |, I4 Q. q
// executed in a specific order, but these steps should0 B. l4 Z5 {6 w/ E* ]% T6 s
// take no (simulated) time. The M(foo) means "The message" Z0 D! k, B- F3 p; S
// called <foo>". You can send a message To a particular/ i( M6 _8 T* n( ?0 w* w3 V
// object, or ForEach object in a collection.5 T. m) o( Z) I& T) V
- N6 ~4 t( ~1 o( m$ x2 w$ f g
// Note we update the heatspace in two phases: first run
" z; ^* k+ T D5 {8 ^ // diffusion, then run "updateWorld" to actually enact the
1 R" t8 Y/ u! @1 ~1 u9 _ // changes the heatbugs have made. The ordering here is
1 p. Z) v; }$ I // significant!
7 g7 s0 b6 ?7 ? x$ H% X% q
5 J0 n0 D) F1 z/ ?$ d. J // Note also, that with the additional0 B7 l' E! x% @6 c
// `randomizeHeatbugUpdateOrder' Boolean flag we can* A0 a+ J" ~) F* v9 _
// randomize the order in which the bugs actually run" X" W1 G8 }5 X! H) U0 ~
// their step rule. This has the effect of removing any3 V5 q3 M* F' S" c v# ?
// systematic bias in the iteration throught the heatbug
: `4 P: { @: y; L6 G // list from timestep to timestep: {( I6 r2 ?" f2 f
: e6 t- s1 X" |% _! X' n // By default, all `createActionForEach' modelActions have
' t7 ]! D: J6 u: z: O // a default order of `Sequential', which means that the
4 K7 V, H, r' Z& K // order of iteration through the `heatbugList' will be
0 {; @) z8 h h2 w6 H: k5 f // identical (assuming the list order is not changed/ n7 |! E/ K1 O' J
// indirectly by some other process).
3 P' y# F6 |6 v8 ~# G" o. b+ V 9 Q ~8 p1 @9 k4 n0 l! F6 r' @
modelActions = new ActionGroupImpl (getZone ());
+ ?2 d; u( o: \; L. [+ h8 E6 v+ j1 G3 A
try {. I& H3 {+ y% R- B: S4 e$ [% z
modelActions.createActionTo$message% ~3 X2 @3 b( i6 c* d: A& h
(heat, new Selector (heat.getClass (), "stepRule", false));# Z% V8 V, J7 @' }* g
} catch (Exception e) {
( b- v x6 d. d& D/ X3 l; r System.err.println ("Exception stepRule: " + e.getMessage ());
8 X# I5 ]5 e3 z4 @ }
3 v3 L( j. z ^; ]7 [
4 f5 A U: B- W# t0 |# R+ f0 R try {
: @- M0 m2 N) R! v' ~" ~) I Heatbug proto = (Heatbug) heatbugList.get (0);& T" q+ D2 ]% o' {* t, n' N
Selector sel =
# c' O- m$ j& c new Selector (proto.getClass (), "heatbugStep", false);
U3 u% r: I( L- K9 k actionForEach =* Y* t; z# ~* j) `
modelActions.createFActionForEachHomogeneous$call9 T" g) n* G5 r @8 q8 {+ C( L: S7 Y
(heatbugList,; z8 `7 b$ e8 V! u2 z
new FCallImpl (this, proto, sel,3 u K, S) o2 Z: {
new FArgumentsImpl (this, sel)));
- h" L8 z! E: K7 m! h, t' `7 _ } catch (Exception e) {
& \ g; K2 y6 o: t0 j e.printStackTrace (System.err);1 y) f5 {( U `" @7 Z6 y, u) n
}. M/ S. A4 X5 Y2 {, |7 X
" h8 f1 H5 }8 [ syncUpdateOrder ();, @: m# `' D& s& p, d
$ n" ] t: O+ w9 O" i0 t try {
" p; w0 ` x9 @0 L9 `" A modelActions.createActionTo$message * o7 I0 j4 s5 ?8 V9 q
(heat, new Selector (heat.getClass (), "updateLattice", false));6 ~; N. ?6 a* _& D# S
} catch (Exception e) {
' }1 a1 T# t* `# h$ c System.err.println("Exception updateLattice: " + e.getMessage ());
4 s3 \( A! [, z+ F% B1 [) {/ C$ a: y } |% F: m% i) a$ m+ r1 {& q( x
; n+ j" f2 R4 ]2 ^; V
// Then we create a schedule that executes the4 E, A) ]0 y+ R( z2 i
// modelActions. modelActions is an ActionGroup, by itself it
" {3 t1 F8 E% Y // has no notion of time. In order to have it executed in" g- [; X( j8 E$ A( J
// time, we create a Schedule that says to use the
( n' s7 m8 P/ l: K, p // modelActions ActionGroup at particular times. This
. s1 g% A) ?; U/ q // schedule has a repeat interval of 1, it will loop every$ \, u( X$ q# r( ^, C9 d
// time step. The action is executed at time 0 relative to
" t3 ]1 d% @: R // the beginning of the loop.
, ]1 r8 i( _( W8 Z" A2 L* w. v1 d$ i
// This is a simple schedule, with only one action that is
. E% @: i% K9 q; a { // just repeated every time. See jmousetrap for more
' l2 S1 u* v+ `: `% m' t // complicated schedules.
- D7 ` p: r' q0 }& z , k+ Z* M, H) W
modelSchedule = new ScheduleImpl (getZone (), 1);
; A/ Z/ U2 y( O' X- d' N: C( M modelSchedule.at$createAction (0, modelActions);
$ G( ~% s& ]. q l" U
' U/ m& ~7 `1 F" M return this;! l; }3 D7 l6 Y: U" m0 R& H9 Q
} |