HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& }: `6 s& B% z( j V' R; R; g$ [' @5 w
public Object buildActions () {7 w. q- M) l' V* `: ~
super.buildActions();$ u/ m: L$ v( B7 k0 D
}1 r) w' s- m, E; ^ // Create the list of simulation actions. We put these in
! L% O+ k" Y$ d // an action group, because we want these actions to be
/ ~1 b% i" a- A // executed in a specific order, but these steps should# [$ s! W" j# J+ ?$ r3 ^0 @6 G# m; t/ g
// take no (simulated) time. The M(foo) means "The message4 L4 T4 z" _6 o8 h# T# P
// called <foo>". You can send a message To a particular. e# f- `& J5 g ~
// object, or ForEach object in a collection.
' |! H2 X4 u z6 B/ K% Z" C 4 V* z- q3 ^" ~
// Note we update the heatspace in two phases: first run
7 }1 i( t( p0 T3 @1 Y D // diffusion, then run "updateWorld" to actually enact the+ O/ B( H2 F8 Y7 d& I
// changes the heatbugs have made. The ordering here is
" q" p( o5 P. q/ P // significant!9 d; `0 ^$ D3 U5 o! q
' E r/ H- F0 h f // Note also, that with the additional
$ ?4 F# y, x+ B- _1 {" h6 c% A // `randomizeHeatbugUpdateOrder' Boolean flag we can
3 _* |! n5 ~5 `, ? // randomize the order in which the bugs actually run
3 h7 K0 z0 S$ P9 }" R! b // their step rule. This has the effect of removing any9 r3 p9 Y2 j5 A# n7 K
// systematic bias in the iteration throught the heatbug
" Z$ S3 W$ |+ _) f O/ h5 v5 s% C // list from timestep to timestep
- A$ D/ N# U7 k( S9 _' d# m
# ~' p& S V& g* u, G // By default, all `createActionForEach' modelActions have
7 Z& c, z$ K5 L( S3 \, F' [, V // a default order of `Sequential', which means that the9 i1 k1 w9 j; {( @% \$ l2 i
// order of iteration through the `heatbugList' will be9 y+ j) k3 ]+ u! }) Y2 S& l
// identical (assuming the list order is not changed
6 N0 k1 D* O3 y7 N% l3 p // indirectly by some other process).+ r5 [+ @& A- F8 z* \
% N( s/ U/ K9 e, |. k
modelActions = new ActionGroupImpl (getZone ());
6 V$ R7 }4 x. D0 X- e! a& ]- C; B2 p0 h
try {: H; H9 h T7 O/ {1 C# Z
modelActions.createActionTo$message, p, F, I/ L$ q. i
(heat, new Selector (heat.getClass (), "stepRule", false));
9 R4 v6 b% d1 l } catch (Exception e) {6 N+ H# V& V. e
System.err.println ("Exception stepRule: " + e.getMessage ()); j* L* X# ^. c8 S( O+ t; q
}, X1 d1 V2 _. S# Y' I
6 ?! `5 i Q; t: i5 A try {
, I2 c7 P) `1 m* m4 m7 t$ B0 O Heatbug proto = (Heatbug) heatbugList.get (0);) t5 d* E2 y1 j6 @3 K
Selector sel = 1 B/ ]$ U, t; i5 D7 p
new Selector (proto.getClass (), "heatbugStep", false);0 R3 O* n# z5 e. ?% k4 M/ U
actionForEach =! `. a2 M* [4 j! I
modelActions.createFActionForEachHomogeneous$call
$ R3 O5 E& Y( b2 k$ C8 x (heatbugList,% D/ }, J" s* L% k
new FCallImpl (this, proto, sel,
9 w6 i/ M, z+ z, @0 |/ ? new FArgumentsImpl (this, sel)));
5 F/ Q7 T6 m8 v1 u N! @: y: p1 v } catch (Exception e) {
1 Z2 s& ^3 g# S5 G% U8 w& O! a8 X e.printStackTrace (System.err);4 l, ?& Z* Q% U1 V- @0 t. E0 z
}* i8 t1 u1 G9 a8 M( _6 q. `9 h
) l9 T+ m R& F c2 c
syncUpdateOrder ();
' M: e' g1 C7 v Y/ D: B) D. u3 b# ` i0 v( {+ w5 e- @0 Q
try {! K$ P% w1 }1 V
modelActions.createActionTo$message
2 l( d3 B5 X. z! d- N* j% T* ~ (heat, new Selector (heat.getClass (), "updateLattice", false));
' g/ S% Z' O9 I$ y q8 G, J5 b } catch (Exception e) {( P* l7 y( |7 }3 [- `: ?
System.err.println("Exception updateLattice: " + e.getMessage ());
2 e% W# e& O- H, l }
4 J6 y5 A6 Q- c5 F) m
# o: J" s6 U4 H( @/ A9 C n // Then we create a schedule that executes the
1 ?8 f7 ]. V- W7 ~, ?: g // modelActions. modelActions is an ActionGroup, by itself it& v) }( X/ `1 p/ u9 J" b
// has no notion of time. In order to have it executed in
9 r* ~) a& R& q3 p# i2 F // time, we create a Schedule that says to use the
- [* O. B# a) n/ q // modelActions ActionGroup at particular times. This6 W0 {' A( k# {3 H! ?
// schedule has a repeat interval of 1, it will loop every
1 T6 V8 y. R7 k: T // time step. The action is executed at time 0 relative to5 \: y" F( f% @' o
// the beginning of the loop.
6 W4 ^/ m C7 G' I8 H2 Q8 P$ o, C- H+ A- e0 ?
// This is a simple schedule, with only one action that is$ k1 K% K' M9 ~, u7 U7 r W
// just repeated every time. See jmousetrap for more7 Z# c1 `/ n+ q$ P1 k1 v# [7 o
// complicated schedules.
+ Z/ q% E& M6 B5 _" a $ @0 i4 D6 ~7 R8 p) h& _
modelSchedule = new ScheduleImpl (getZone (), 1);) H! j6 a- ~* p5 K0 X
modelSchedule.at$createAction (0, modelActions);7 L$ l6 V D! L+ d& U/ U' p8 a. |
. u& J$ k" r. ?9 a2 v( P
return this;: ]0 N4 q9 U. I5 g' ~
} |