HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: a1 f) p8 D" p& J, V. [5 }5 O; K" s
( \7 o# N+ ? R, R' H public Object buildActions () {
; y" H& O9 w- a0 Y( U1 f super.buildActions();- d8 Z# J) {& g5 A
9 p# @: H, H) H9 c# U8 Y5 m$ { // Create the list of simulation actions. We put these in3 C8 g7 q4 j* T& P
// an action group, because we want these actions to be2 O* A6 ~* F' O0 M0 h
// executed in a specific order, but these steps should
6 R! I' f$ n9 n. ^1 r // take no (simulated) time. The M(foo) means "The message: i7 C8 s' h) U" H) {' }' s
// called <foo>". You can send a message To a particular
. o- \ `3 M) ~8 } // object, or ForEach object in a collection.
7 K4 X! q6 ?+ s1 j/ p
. x7 Q8 e# L6 R. a2 y4 ? // Note we update the heatspace in two phases: first run2 {. y" f4 P/ h/ k
// diffusion, then run "updateWorld" to actually enact the
0 _% X3 u6 I+ a // changes the heatbugs have made. The ordering here is
[6 T [0 A/ ]) M3 H4 A/ u: r // significant!
# j, X/ h$ v) f& L' A6 Q- d
% Y# E7 \" s% p }% v7 ? // Note also, that with the additional6 R/ l2 u( F, y+ b0 g" O$ e+ a: I
// `randomizeHeatbugUpdateOrder' Boolean flag we can: G& W7 ?6 s$ C0 l
// randomize the order in which the bugs actually run
5 u! `: i9 Z. D0 m' N: p3 X' { // their step rule. This has the effect of removing any
$ L! z' g3 Z& o4 u // systematic bias in the iteration throught the heatbug2 M9 }# N5 d& K( i% Z. R/ N
// list from timestep to timestep( v5 [8 @/ S; B4 Y d V) r
- ~0 W/ S; ^9 e4 s! p
// By default, all `createActionForEach' modelActions have
( T L9 o4 J2 k( N // a default order of `Sequential', which means that the
. x! F8 l0 t2 Y+ V" e1 c // order of iteration through the `heatbugList' will be
/ P) X# v% L7 v; i/ f' n // identical (assuming the list order is not changed' P4 H& x+ ]7 y& R
// indirectly by some other process).3 }8 a6 h' a# @8 h
, S0 {# x+ @7 o2 Y; m6 q
modelActions = new ActionGroupImpl (getZone ());
- a* _4 q! g; x; Y, j3 ~, }% Y" `7 A# Y9 k9 |# D$ u8 w% e- Z8 @
try {
: q: P. O# X5 p modelActions.createActionTo$message3 N" Q: J% Q$ C/ z8 W) W2 Q
(heat, new Selector (heat.getClass (), "stepRule", false));
' D( S- ~9 X+ U1 ^* t$ g } catch (Exception e) {" G) E2 [' g Y! {
System.err.println ("Exception stepRule: " + e.getMessage ());
# A2 g9 \$ P# }" B8 t }3 p4 N4 _ e( w
6 i; a% U6 L# y6 X4 M
try {+ E& m. k5 O1 u4 J4 W3 @
Heatbug proto = (Heatbug) heatbugList.get (0);7 c {1 T$ J8 Q) {
Selector sel =
) R& K$ ?( U: F9 s$ \ new Selector (proto.getClass (), "heatbugStep", false);, G) k% e1 u0 F* g
actionForEach =% n% {" z& [" ^
modelActions.createFActionForEachHomogeneous$call+ T( J! H6 Z, u; k- b* b4 q9 x
(heatbugList," I9 f5 U1 d6 W4 P, p
new FCallImpl (this, proto, sel,2 \- V& T9 n, R1 t1 j$ @
new FArgumentsImpl (this, sel)));/ v0 p/ S: V. N
} catch (Exception e) {
2 D6 v t" O( Y, r& F4 s e.printStackTrace (System.err);( Q' ^1 J1 m. s, ~" g) I; y
}9 K% J+ Q- x9 o
! N; q& c- k. V: [* l P3 S ]/ X! t
syncUpdateOrder ();% t6 k: | u3 W
* [' H3 k' }# q% M try {
; p% Q( E$ L5 u5 b3 o! S modelActions.createActionTo$message C- l& c7 I( O5 x9 [! H
(heat, new Selector (heat.getClass (), "updateLattice", false));0 I1 I) A1 S# M3 J w, I
} catch (Exception e) {
+ E9 Z& o4 h" ^ System.err.println("Exception updateLattice: " + e.getMessage ());
# u5 D; f' b6 p }; M# z$ H# ~+ C) b$ h, @9 v5 C, r
. I! S4 O; v$ B) h, B! I // Then we create a schedule that executes the
; E0 b" ?' ^, n- ~ // modelActions. modelActions is an ActionGroup, by itself it# t# [( `' a3 `* y; u8 M" }
// has no notion of time. In order to have it executed in/ o) w/ H8 y5 c+ Q$ q6 [% B& Q
// time, we create a Schedule that says to use the
3 s& s% U% F' j1 w // modelActions ActionGroup at particular times. This
/ K6 N. A5 _# W& O9 i! t3 D // schedule has a repeat interval of 1, it will loop every
9 B: T6 k; l1 c' P/ E // time step. The action is executed at time 0 relative to6 w$ o% u. X7 `3 q6 S$ |6 H, D
// the beginning of the loop.
) t1 v: o4 A$ s
* `; O9 Z! ?& k7 T' W // This is a simple schedule, with only one action that is3 L x, ?$ l/ L, x* n7 w
// just repeated every time. See jmousetrap for more4 b0 R( q8 w5 O7 |
// complicated schedules.
N2 I9 q- c" _# j( u ( Z* A% s$ ^8 I. q8 ]- ~
modelSchedule = new ScheduleImpl (getZone (), 1);
9 Y( n0 z1 _. c5 V7 }5 z modelSchedule.at$createAction (0, modelActions);
6 [6 @! ]- R! z V' a9 Z 4 D& U/ n2 M/ J D- n; P: e" {0 d
return this;
- k r" J% c3 t8 C0 ?! R' m } |