HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
O6 ^& N) l0 ~; T9 g
/ ^4 w2 w3 r$ ]5 \1 ? public Object buildActions () {$ z7 V4 V9 x# t4 \- F8 ~% C. N
super.buildActions();
( ?1 P9 x' d. }$ i! X ! U. R1 [/ J: M+ T7 E
// Create the list of simulation actions. We put these in
% j5 p" W2 K* ~- Z: z, U& M% s // an action group, because we want these actions to be0 u( J+ Y1 u) r
// executed in a specific order, but these steps should
* L6 `1 `0 P) F0 | // take no (simulated) time. The M(foo) means "The message
! D( _' z* h. [' } // called <foo>". You can send a message To a particular- r7 ~2 h3 {" c+ k0 Z- C
// object, or ForEach object in a collection.
$ L5 A! o- n( G3 P
O: \: Y2 c V0 N. k3 N // Note we update the heatspace in two phases: first run
: ]+ R# q8 S [" p // diffusion, then run "updateWorld" to actually enact the2 @$ ~& G9 Q. z2 {6 C+ R8 C! K
// changes the heatbugs have made. The ordering here is
0 p( \8 [: M8 W8 O" w& v7 ?# V- ^ // significant!
$ L! j4 G. j& e- j7 u ; C0 }: p+ Z# f
// Note also, that with the additional7 ]9 C6 ~, J, ?( E5 s; v$ z
// `randomizeHeatbugUpdateOrder' Boolean flag we can
' ]+ l V4 ^7 @9 S' v // randomize the order in which the bugs actually run1 I# p/ s* N7 c1 ^7 J6 n6 T/ `. F
// their step rule. This has the effect of removing any- ~0 j; M# H! U
// systematic bias in the iteration throught the heatbug
5 c/ F/ ]- Y$ e0 a7 r; C' B // list from timestep to timestep, }- {( D* l! m: n
1 h6 a& Q" M/ r+ X5 }: t+ m
// By default, all `createActionForEach' modelActions have
+ r; B, u+ }5 W: }# ]. W // a default order of `Sequential', which means that the7 ~2 _4 L0 v+ C# g
// order of iteration through the `heatbugList' will be: S e' c" t6 N6 D" P
// identical (assuming the list order is not changed; V; R' m5 Q& I
// indirectly by some other process).7 W0 I4 K: C6 [( o- F H. ~4 n4 {
: B! S# f8 d2 k8 d; q0 c
modelActions = new ActionGroupImpl (getZone ());- q3 i& s% n& a U7 Z4 C7 e
) S' p' y7 i* D A# P4 V7 j* s
try {. w+ ^) g- L' N2 W( y4 R% ~
modelActions.createActionTo$message
# j, m9 F# o; ^! H. M: ?, z# |2 a (heat, new Selector (heat.getClass (), "stepRule", false));
3 Q5 L9 r1 n2 q6 R# d } catch (Exception e) {, w: ~) ]" W# M- S4 F: W
System.err.println ("Exception stepRule: " + e.getMessage ());
8 z$ y& N7 m3 ^2 L' ~, X4 E }
- U) U4 {4 [4 |0 v/ Y. I ^6 W; g, H; ^6 ]7 A
try { G& |& D, N) P& |6 p6 J3 o. U
Heatbug proto = (Heatbug) heatbugList.get (0);8 v3 C7 g8 ^0 \1 L
Selector sel = # Y5 E* T# \& i$ q# w
new Selector (proto.getClass (), "heatbugStep", false);5 U$ Z; b p Z( Z) ]) e% B
actionForEach =5 ]1 ?! v6 ^- u1 k% n, l ]
modelActions.createFActionForEachHomogeneous$call; h0 I# s9 K( T4 o7 [& `) l
(heatbugList," W( c4 }7 T. y; U
new FCallImpl (this, proto, sel,2 H) U- g: _4 z: z
new FArgumentsImpl (this, sel)));
6 Y" [9 t8 H6 m `) z } catch (Exception e) {
& _! g7 G) s( `* T: N- D e.printStackTrace (System.err);4 k2 t9 m) [* U a
} f. l# \9 V9 l1 i9 b4 p. ]2 M
J2 ^' i4 [4 O& B. B2 ~
syncUpdateOrder ();9 W5 E$ ^ j# P, m9 c$ m5 a
1 b9 s5 ^! t4 l/ ~. G I
try {
! K1 a4 H# S G9 @ modelActions.createActionTo$message ; } }9 Q- p3 u
(heat, new Selector (heat.getClass (), "updateLattice", false));
* s( k8 |) M, l p } catch (Exception e) {
" f2 x- R# w4 K9 \' }% P9 k- }3 R System.err.println("Exception updateLattice: " + e.getMessage ());" |# U- Z, G! X3 ]
}
; _& q" _& ~* `7 N% U( V 3 U# o# G( s+ Z. a% r1 G
// Then we create a schedule that executes the
; m( C/ p# k9 ?; J5 V: \ // modelActions. modelActions is an ActionGroup, by itself it! k) {, G A$ O1 U9 ]
// has no notion of time. In order to have it executed in# N. ]/ ]8 Z! [$ t) g
// time, we create a Schedule that says to use the
- v; z* R8 |/ s% O! q // modelActions ActionGroup at particular times. This
# r( I- K2 \7 v' r6 i( ^+ T# @% s // schedule has a repeat interval of 1, it will loop every
; L" B1 z) Q6 u( I6 C. {1 V* g // time step. The action is executed at time 0 relative to
/ U. R4 |& H8 }6 E% n2 k1 P // the beginning of the loop.
, W7 }; h1 _$ w& S2 Z
; m' w/ X0 l/ f7 l; m- o' F; x: e( { // This is a simple schedule, with only one action that is
' M) `4 ~" {, b5 m" b: i // just repeated every time. See jmousetrap for more
* i2 c" L) s7 m4 z // complicated schedules.
" a7 c( J7 u% X; T* \ $ Y3 |) M0 D+ V Z& t
modelSchedule = new ScheduleImpl (getZone (), 1);; @+ u! @, F" D5 C8 _/ _) o
modelSchedule.at$createAction (0, modelActions); X1 D. ^ j% [8 a+ Q
( a, V; L& d4 A5 H7 t1 t
return this;/ `* \1 z1 m7 s1 x
} |