HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: B8 A: f0 [( {
5 F" ?0 T4 Z0 Q5 J
public Object buildActions () {
6 Z7 }- r0 n( V) _6 q super.buildActions();1 N" D+ V, G$ S) N0 ~( o
7 E5 X1 _! O3 x d' |6 I. {- P" C
// Create the list of simulation actions. We put these in1 c- x8 A. o3 h7 Y
// an action group, because we want these actions to be
# q9 e: X+ R, l6 ?4 S // executed in a specific order, but these steps should
6 Q% ~9 S/ n6 V1 I# |" Z% N0 I // take no (simulated) time. The M(foo) means "The message
+ f' {0 Z+ [; B9 W: A4 O8 M // called <foo>". You can send a message To a particular" k" L9 ]6 [8 |# T# e
// object, or ForEach object in a collection.
, X7 v+ _4 x8 D. J- r ?& S% q6 w
$ _ ?( \) N4 U' p/ _7 Y* P* q // Note we update the heatspace in two phases: first run* V9 c# ~' a, X* W( Q# m& U
// diffusion, then run "updateWorld" to actually enact the- y* v8 h! e/ C9 c, P' s/ y n
// changes the heatbugs have made. The ordering here is3 z1 X; c& W! k1 Z/ c% d; x* O! I
// significant!5 L5 B$ c; J8 y. L% v
z' ]4 E% M- s" d/ C, u) g+ A // Note also, that with the additional
1 Z9 D8 o* h! {/ }: z. H# d // `randomizeHeatbugUpdateOrder' Boolean flag we can
9 H: G5 n2 @5 ~+ `, b // randomize the order in which the bugs actually run0 Y" j6 j- J6 \/ y6 p3 E7 m, m7 s
// their step rule. This has the effect of removing any- G" X; M+ N7 G6 H$ P: X- ]
// systematic bias in the iteration throught the heatbug
- G. I% z) i8 K; U# E6 F( l( k // list from timestep to timestep& C O5 _. ^9 S) X6 ^
: L! p* u& g" q: y% h' i0 F' y // By default, all `createActionForEach' modelActions have6 U5 E& m1 {2 k. Y* `3 v: \( I
// a default order of `Sequential', which means that the0 j& K2 t6 o, m h0 Q
// order of iteration through the `heatbugList' will be
" [; Y% N- q/ J) g( N8 J // identical (assuming the list order is not changed# l8 @0 K- u% A) l2 ?
// indirectly by some other process).
5 h# o4 o2 h( f- ^/ g* g Q* T' c/ V' j3 K2 f' M
modelActions = new ActionGroupImpl (getZone ());
$ Z; l% u2 a" l- o( R( d$ n$ g6 J4 q+ p: o- r8 W! e
try {/ p" x0 J! i- q M
modelActions.createActionTo$message
# X; L# G! v% y2 c (heat, new Selector (heat.getClass (), "stepRule", false));
% K; R( `' g$ c } catch (Exception e) { F! j& A8 [+ r8 l, Y
System.err.println ("Exception stepRule: " + e.getMessage ());+ D( R# m1 Q' t6 D( c6 b
}! T2 y( w6 m# Y$ p0 C0 q# ~
( c$ r. W% N, \8 c$ _ try {
" R" B0 n& n/ m- n } Heatbug proto = (Heatbug) heatbugList.get (0);
* j7 F0 Z9 ]0 B# ~ Q; C) L5 x Selector sel =
( I% @, k! i0 X; ~ new Selector (proto.getClass (), "heatbugStep", false);" l1 _. Q9 d) ~7 a
actionForEach =
& k% ], C# L2 D& G4 I5 V: ^ modelActions.createFActionForEachHomogeneous$call
3 v, r" y# {( ?) R( f2 V6 U (heatbugList,
" ]. d* v6 V& _ new FCallImpl (this, proto, sel,4 i4 _' c3 k2 h6 A
new FArgumentsImpl (this, sel)));
2 h5 N+ X3 S+ |" l) ^, ~2 H( l } catch (Exception e) {
5 |: P* R3 X z$ `9 Z, J5 R# C) P e.printStackTrace (System.err);
4 H' {4 t3 `7 | }
U0 o! o3 Z- l" O5 W a' K 7 m& N2 U# z6 L' l2 o& f9 p
syncUpdateOrder ();0 @7 i' O5 R; X% i- H: a1 y1 Q
% _7 j; l9 Z5 a& r, B, _' f% J
try {! G X2 M8 A* r: v: | s- N
modelActions.createActionTo$message . Z& v+ K0 n/ l2 F: ~+ x+ d
(heat, new Selector (heat.getClass (), "updateLattice", false)); H6 }& J' k7 w7 ~
} catch (Exception e) {; c- R( r0 }+ {' {+ W
System.err.println("Exception updateLattice: " + e.getMessage ());
7 ?0 ~# N" Y p0 f; ? }6 X3 g) |8 x' h4 E% k1 e
9 o1 G9 }# A* l3 z- N" S
// Then we create a schedule that executes the
2 J+ Y" b' V* p8 H // modelActions. modelActions is an ActionGroup, by itself it! c# X# D |1 U* {2 c, \
// has no notion of time. In order to have it executed in
2 T# \$ v! t' c/ i; I. B // time, we create a Schedule that says to use the
`$ J, U+ Z+ ]9 V: U // modelActions ActionGroup at particular times. This
& ~/ o+ U8 n" G* ] // schedule has a repeat interval of 1, it will loop every
# v- {- R& t* G$ r4 F // time step. The action is executed at time 0 relative to" G% t. z: ~7 V0 y" m' T( n9 i" Y
// the beginning of the loop.
' N; P$ H* t. @1 U3 g. Q, l$ a% d8 X% I) [. Z" P
// This is a simple schedule, with only one action that is! X: R @5 h5 G+ U7 i3 ]2 n8 x2 X
// just repeated every time. See jmousetrap for more0 s! P5 \- r$ p
// complicated schedules.
: `7 W: a. g, M! o2 T5 |+ i ' b6 K: a5 ] x' C' H
modelSchedule = new ScheduleImpl (getZone (), 1);
( c: F: q7 ]; H5 h% s$ P modelSchedule.at$createAction (0, modelActions);5 C2 U. y! j* n) U7 S
, ` |+ t* {* Z; [6 v return this;
5 z8 N: K1 J: f, x! ]. [4 z } |