HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! n/ i, F7 j; _. Q, ?# Q7 [! Q7 [/ I8 ^1 v# Y5 I" ~
public Object buildActions () {. s! k( h$ C9 i7 D; H
super.buildActions();
z5 n( }7 G! z, V ]
) Q. H' h( m# c // Create the list of simulation actions. We put these in
- ]$ D5 p7 y% P0 J- m7 d // an action group, because we want these actions to be) D7 l3 f1 [6 w3 W' L, s
// executed in a specific order, but these steps should
. U p) z% J( ]% d5 r! j // take no (simulated) time. The M(foo) means "The message
! K2 f5 ^2 t, e i4 i6 P // called <foo>". You can send a message To a particular
6 u2 G8 K. p. S0 } // object, or ForEach object in a collection.
' J) i9 H/ v( J- M) s# Z7 y3 K
; Y$ e( |$ S) V2 h) k3 o( I // Note we update the heatspace in two phases: first run
: G- {5 v/ u) S3 T# N // diffusion, then run "updateWorld" to actually enact the
' q* {+ K x2 r! |' @7 A // changes the heatbugs have made. The ordering here is
, Z' i, I) b( H# U+ }. l // significant!7 p. k) Y+ {; a Z
1 j' w3 s; x) j* K) ^
// Note also, that with the additional
# Z2 ?& C+ _' F; L% L ?, d6 i* t // `randomizeHeatbugUpdateOrder' Boolean flag we can9 g1 M1 _/ ?$ `
// randomize the order in which the bugs actually run
+ j' x& \1 _0 }6 h( B7 _ // their step rule. This has the effect of removing any0 n% G0 G: R; X! e! }. D
// systematic bias in the iteration throught the heatbug& x7 h9 _1 j4 B
// list from timestep to timestep
' M2 o7 ~9 P$ \8 c
2 |9 `7 Y8 E& ~ // By default, all `createActionForEach' modelActions have# O6 Q/ g# F9 h, n8 u* `
// a default order of `Sequential', which means that the
. G6 Y2 q5 G( I // order of iteration through the `heatbugList' will be
9 X+ b7 f& c$ q& h/ i' M9 F // identical (assuming the list order is not changed( W! s8 v9 |- q3 p
// indirectly by some other process).: x9 M4 @ a# F* \
& R! E3 T, C$ X, w5 W6 p2 L modelActions = new ActionGroupImpl (getZone ());
" Z j/ m5 {+ E* j: f
6 E( e" e, `3 I8 N1 O8 n try {6 C7 M u+ w* C
modelActions.createActionTo$message9 Y( Z9 j! F5 v
(heat, new Selector (heat.getClass (), "stepRule", false));
% H3 Q$ f) e) g- i } catch (Exception e) {
: o4 [% ]9 h: T8 I F+ ^7 ? System.err.println ("Exception stepRule: " + e.getMessage ());. W7 y0 J. I$ `& `
}
# v" S+ E5 d8 \" O+ M) X) k* r3 L; y' p
try {$ \+ J& f5 _9 A7 H3 p0 B
Heatbug proto = (Heatbug) heatbugList.get (0);) X" e) T# m+ P- h" s0 r
Selector sel =
! H7 ?7 t& ^8 U3 m$ a6 I# s; T new Selector (proto.getClass (), "heatbugStep", false);
* f) J# w7 o1 `7 t) F" V actionForEach =
a5 a% ?" v. F; F5 D' F modelActions.createFActionForEachHomogeneous$call1 V& D6 }& N+ ?# T0 N" X H
(heatbugList,1 Y/ \* i+ r; g; C
new FCallImpl (this, proto, sel,
: F; x e4 }8 V/ k+ Z new FArgumentsImpl (this, sel)));
6 e; G4 u8 Q5 Y; h) b9 H4 m } catch (Exception e) {, R) [3 U9 S# G" q
e.printStackTrace (System.err);
3 {4 t8 i: r1 k3 \' i, W4 d3 d }
8 J, S! e: p/ J; c
) P$ c) c% Z: l+ I2 K4 k( b7 P syncUpdateOrder ();; Y7 F! J) o4 a5 }
. M9 G) i# p0 \% q6 P try {" C1 S' S# l8 z% M: Q
modelActions.createActionTo$message
+ a" ` p# p; ?9 G' z4 f/ ? y (heat, new Selector (heat.getClass (), "updateLattice", false));7 t; k# Y) A' Q( d+ V, g
} catch (Exception e) {: g E$ ^* O0 k/ i- \5 j
System.err.println("Exception updateLattice: " + e.getMessage ());
( p, |8 O+ N8 t* ] }
9 F9 S! M! I% {! u 1 r9 i2 B8 N8 U' o) Y; a' F
// Then we create a schedule that executes the
: v* C: e4 C* q8 ] // modelActions. modelActions is an ActionGroup, by itself it
6 e/ B- o' N% k' @% F$ ?/ e- O0 u8 ~ // has no notion of time. In order to have it executed in
) m; c ]1 G, G // time, we create a Schedule that says to use the
# m" j6 Y1 r; Y( y2 d: U // modelActions ActionGroup at particular times. This% Q' V% O3 X9 w. C. d c' j. u0 c1 x
// schedule has a repeat interval of 1, it will loop every
+ @( ~0 Y4 y# ]. ?: P( o5 @ // time step. The action is executed at time 0 relative to$ U" W. n" W0 Z M
// the beginning of the loop.
, C4 Z7 [, t/ I; `+ B: q# j
7 d8 t0 y j$ S3 } // This is a simple schedule, with only one action that is
& ~8 f4 _" D9 I, ^% s // just repeated every time. See jmousetrap for more2 ~% J# V3 c2 V5 k; q& s5 X
// complicated schedules.
- S# B8 T$ [- e& q7 | " s; Q" R8 r( ~7 R! }1 r
modelSchedule = new ScheduleImpl (getZone (), 1);
/ W5 P+ w9 h/ E, y modelSchedule.at$createAction (0, modelActions);4 C* ?8 f+ Z- m% i4 ~( ~
' f c9 n" ~. z7 D" f4 G& |
return this;0 D0 C7 W3 H: j7 @, |
} |