HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# M. Z& U5 X6 O$ _5 t
, U+ }, F1 y E% I public Object buildActions () {) V( n, }/ r y/ K5 N% w" @+ t, K& \
super.buildActions();
( j+ q. R* v5 M( G0 u* F4 @. J
2 Z) ~; o" j3 I( B* Y! Y& E8 W // Create the list of simulation actions. We put these in
" }2 [5 v" i2 V+ Y- u // an action group, because we want these actions to be' J v' k6 j% V/ Y% u
// executed in a specific order, but these steps should; h9 _4 C9 D" @
// take no (simulated) time. The M(foo) means "The message
1 c3 J2 \& t$ l1 M ^# ?1 B: A( p // called <foo>". You can send a message To a particular3 S0 M5 Z- h4 F: _- _* P9 v% M+ O! d
// object, or ForEach object in a collection.
% p$ c X, A& F6 x
/ c {* j6 R- h2 ?0 H // Note we update the heatspace in two phases: first run, [) B0 S# V( w5 o
// diffusion, then run "updateWorld" to actually enact the
- [' J# P @5 M3 D // changes the heatbugs have made. The ordering here is; G9 v N5 G1 w' k7 W' _1 `, [/ b
// significant!
& X" v# w5 f. T( P; n# [
+ u' u/ a7 s: C // Note also, that with the additional: i8 a2 D) s5 d3 x- o( n3 j
// `randomizeHeatbugUpdateOrder' Boolean flag we can, E5 _; _. D8 L
// randomize the order in which the bugs actually run
0 ~0 M: R- r- n4 q2 ]* k: I // their step rule. This has the effect of removing any
7 G6 ~" l+ T4 F, g( J8 ` // systematic bias in the iteration throught the heatbug
h' w+ N! t' U1 J Z9 K& B. Z // list from timestep to timestep
: K. F" s& u! @8 p |, e0 m
! Z3 R$ d. p: K // By default, all `createActionForEach' modelActions have
# @0 }# [* U n/ L // a default order of `Sequential', which means that the) c" t5 n6 B9 Z# ~" u& v9 b+ t
// order of iteration through the `heatbugList' will be$ v( a* \" v' g: W2 Q3 e9 ^- m
// identical (assuming the list order is not changed
* X, ^6 g8 J0 E2 R // indirectly by some other process).
9 l. `3 L$ E r: q
* i# e6 `( x# Z modelActions = new ActionGroupImpl (getZone ());4 Z$ B+ h& m8 |6 W7 \/ Y8 C
& D" J9 P( Q t2 {% p5 b try {
. }; ?. T8 N# X% ^* a, r- f modelActions.createActionTo$message7 ?1 A' A7 L' P. h# V
(heat, new Selector (heat.getClass (), "stepRule", false));" x% G- ^$ ]+ {; r* K1 g V$ f
} catch (Exception e) {
7 ~5 r8 j) Z) n! j9 H b3 \ System.err.println ("Exception stepRule: " + e.getMessage ());
! s8 ? [* m& x0 l) _4 Q }
5 G% Z! u5 F4 d% G$ ]6 U4 ], k1 Q5 K. J1 K6 V" Q5 A
try {
?3 F. Q' T* L: x Heatbug proto = (Heatbug) heatbugList.get (0);
% ~+ P) B/ O) j; k2 C I, _7 j Selector sel =
3 U7 H5 c; N* S- b new Selector (proto.getClass (), "heatbugStep", false);
0 d" H- D3 g2 Y) ?) Q7 t actionForEach =
: S8 A/ ~1 N7 Z* E+ ~ modelActions.createFActionForEachHomogeneous$call
1 h }( \- S+ x1 u (heatbugList,4 ]# l, v$ P5 O0 V7 G" m" K0 ~
new FCallImpl (this, proto, sel,, s, f0 A9 v& V* @3 }8 ~
new FArgumentsImpl (this, sel)));
. s, Y7 ?8 k$ m# a5 q } catch (Exception e) {0 p- M4 u# ^ G" g/ s3 A; m
e.printStackTrace (System.err);; [, q7 a$ a" H4 L( O3 V, X. }1 l
}) Z3 Y: p' f; I m# I6 y: I) x, @8 k
d* B# f: k$ f% N
syncUpdateOrder ();9 b! z$ t# }: x2 z5 J# o
! a* I( I: Y. U, {" {1 T0 t; B o
try {
_4 V" p" o% M. _* @- W" s4 \ modelActions.createActionTo$message
7 u* g; `0 i1 c* E [2 P8 Z7 j" s- V (heat, new Selector (heat.getClass (), "updateLattice", false));1 [- d% m8 w: A' p& O
} catch (Exception e) {2 U0 T. |* C! d! v1 A7 o3 X' C
System.err.println("Exception updateLattice: " + e.getMessage ());
: U& x2 }5 w' w* ]! @3 K' T. f }
2 ~7 X2 m: J$ U2 I
& B. ?$ u' d8 B; \ W( ]& U // Then we create a schedule that executes the( X% a6 E* j* O1 C$ B: |, ^
// modelActions. modelActions is an ActionGroup, by itself it
& o: a C' M5 [+ g- T6 S // has no notion of time. In order to have it executed in
7 |( `8 @6 D x: E8 f& f // time, we create a Schedule that says to use the
0 I7 k% X8 ^' |4 V1 N$ |" P. r // modelActions ActionGroup at particular times. This
, U$ I9 l+ X- R // schedule has a repeat interval of 1, it will loop every% k* W/ v- m; F$ P8 e
// time step. The action is executed at time 0 relative to
' k, j4 a( g' u. N // the beginning of the loop.
8 U% Q! X1 ~6 g1 J8 U: K G r1 | H7 }! m" U* ^* c
// This is a simple schedule, with only one action that is8 A; [% Z* [6 D
// just repeated every time. See jmousetrap for more
; f- F( O* d& A6 i9 ~/ P$ j // complicated schedules.$ {- O/ F& w2 T K
, ^( K, t+ |1 g2 ~
modelSchedule = new ScheduleImpl (getZone (), 1);& J9 s+ T2 z7 Q5 p4 |3 u
modelSchedule.at$createAction (0, modelActions);. l# ]) I) q1 w" p
' I! [$ N: z4 V u
return this;1 R$ Y, ?, @& S V4 f X0 J7 M
} |