HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: {& o7 V9 M- Z& {( a
5 N3 C$ d& J& B9 f; w public Object buildActions () {2 S$ e) r% H3 U8 k" T
super.buildActions();' }' d) G5 W, X
: t t/ M, F. r // Create the list of simulation actions. We put these in
( V8 H( K# f1 S, A6 w. r$ m& j // an action group, because we want these actions to be
5 x$ y& H4 G) c$ j // executed in a specific order, but these steps should
: O& m) T0 K! j // take no (simulated) time. The M(foo) means "The message& `& [$ `7 o0 |6 f
// called <foo>". You can send a message To a particular9 m4 c4 `# T$ _, {
// object, or ForEach object in a collection.# ?4 T& w' q- V1 q2 W
) A; b6 i2 B j: n& u$ C // Note we update the heatspace in two phases: first run' B7 K: |/ {" g* ^
// diffusion, then run "updateWorld" to actually enact the
/ v/ A& x2 [; x2 ]1 _ // changes the heatbugs have made. The ordering here is
, D$ v. V' F$ Z: g( t% p+ K // significant!* c" ?# @, N+ r5 p5 z5 f+ W
# y' E3 B; [) X$ N // Note also, that with the additional! ^7 d7 C3 |* i% V+ J1 d9 t
// `randomizeHeatbugUpdateOrder' Boolean flag we can' G- h. t2 [* c& K
// randomize the order in which the bugs actually run
2 K* n8 n1 O+ u5 n2 | // their step rule. This has the effect of removing any
- Q+ v$ I# \* _9 a1 k$ E // systematic bias in the iteration throught the heatbug, F& ?1 ]- r+ C4 X! y
// list from timestep to timestep- _3 u! F Y2 U, p' `, V( _" l
# Y, D; e8 m7 r! v, R& P. M7 M // By default, all `createActionForEach' modelActions have
& V4 n" ]5 x6 W; E V. j // a default order of `Sequential', which means that the
U+ q' t- H8 C* y) b! O // order of iteration through the `heatbugList' will be2 ]/ D% @) C9 h- ^8 H
// identical (assuming the list order is not changed+ I6 ]# _% D" [0 Q
// indirectly by some other process).
! H5 i" l0 \0 e$ s+ _( _ % ~4 |8 L: j' s1 [! h% R) F4 j
modelActions = new ActionGroupImpl (getZone ());
$ ^ @1 N) z) ]" z1 j0 B* i7 G( Y* a& x, N* t. V6 |7 `8 d, w$ e
try {3 Z1 P! j0 _' V. C
modelActions.createActionTo$message
" N4 p6 I% l6 i+ Z' S (heat, new Selector (heat.getClass (), "stepRule", false));
$ ?8 d! f/ l6 w, m# J" u } catch (Exception e) {& Y# `$ Y; K" v( h
System.err.println ("Exception stepRule: " + e.getMessage ());
% b9 r7 w: ^, j0 H7 Z( d* H8 b }
7 U% w) c- x# l4 P& D* U1 `+ _1 L
/ D X4 H+ |3 E; Y, K8 D" I, Q try {: K8 `2 O! M1 P$ N0 h
Heatbug proto = (Heatbug) heatbugList.get (0);) B L4 k4 n$ C5 o1 t: p
Selector sel = 4 U7 p P0 }. ]
new Selector (proto.getClass (), "heatbugStep", false);# s1 i7 T5 n4 v$ r: z
actionForEach =8 V. n- ~, h3 \) Q( b$ X1 x6 a& Q' `; T
modelActions.createFActionForEachHomogeneous$call
9 x# w3 H1 u# {- g, Q! u (heatbugList,4 P8 _. q2 l5 H+ t% A h
new FCallImpl (this, proto, sel,2 O4 z% X! m& N
new FArgumentsImpl (this, sel)));/ |3 y! y( ~ l
} catch (Exception e) {4 h) M% y" J" ~" v6 ? V* G9 M
e.printStackTrace (System.err);6 S- E* c, J$ i% \/ v
}
( ?4 p0 \3 @! P* l
: G, g* n) ?( v' ` syncUpdateOrder ();
4 F, ^6 R' C: D- r+ v* k& w+ ?- ~
" `( `2 h9 M: ` x try {
7 j+ c( h; N& O0 u9 R modelActions.createActionTo$message
! ^- F3 }, A, F5 |* L (heat, new Selector (heat.getClass (), "updateLattice", false));1 ?* {0 f/ }7 p& D. g; ?& m
} catch (Exception e) {
- p. l9 P+ z" [. Y! q System.err.println("Exception updateLattice: " + e.getMessage ());
8 C% l& g* r9 o+ L3 ` }4 f' g9 L' t) M z" X, G
. G8 j! x6 G2 E" n5 l( A R5 r/ i4 y; m // Then we create a schedule that executes the
" s P( G: G* Y3 o // modelActions. modelActions is an ActionGroup, by itself it
: ^& t. j! E, X6 O/ L! K // has no notion of time. In order to have it executed in3 |$ V& V- v- G0 _$ {
// time, we create a Schedule that says to use the8 C8 o) w3 P2 G
// modelActions ActionGroup at particular times. This
# U+ v" n# Q9 { H5 A, a* t- R* i9 y // schedule has a repeat interval of 1, it will loop every
# J% X. v0 k7 _6 j% Z- N // time step. The action is executed at time 0 relative to+ S; f- F/ F4 |5 h* O+ z, o
// the beginning of the loop.
0 s+ z- u4 v! u, ]
; j' F+ |# S- n$ X // This is a simple schedule, with only one action that is. I5 V2 S9 Q; }! c
// just repeated every time. See jmousetrap for more1 ]6 o3 p7 R* a% r& Y( f
// complicated schedules.! ~+ n1 |! Q% H t$ J! g" f$ G) ?
' B, m# O. K" d8 K; `6 f
modelSchedule = new ScheduleImpl (getZone (), 1);* ?+ l0 g- a5 E6 {
modelSchedule.at$createAction (0, modelActions);* x9 S* T% E- E4 C3 p" [+ v
# G# `" a, e+ O y: O
return this;
" b3 y1 v: U5 c& T } |