HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 H4 g4 T! Y! `9 E8 s# t4 n
) }4 s. z6 i9 t9 `. j. O
public Object buildActions () {
& L) x! ~8 t0 ]7 L5 S. }: `. N1 E super.buildActions();8 `8 P9 E( R* w' h
; A2 W0 u" V/ h, v
// Create the list of simulation actions. We put these in
. z2 [* N# a) G: e // an action group, because we want these actions to be) R+ f1 \' T- z- I; Q; C
// executed in a specific order, but these steps should4 s3 K! H" o& [2 b0 j+ n
// take no (simulated) time. The M(foo) means "The message
$ c4 x/ F8 b8 W% y( N0 r" g$ }8 r // called <foo>". You can send a message To a particular. z( S: w+ k) C1 {" t: T' h
// object, or ForEach object in a collection.
' E6 a! I8 t D! K O; H % V. R/ G; ^3 T, T0 ~/ m$ h
// Note we update the heatspace in two phases: first run
: o1 u/ ]5 {& i4 d$ F0 @. V // diffusion, then run "updateWorld" to actually enact the
+ p$ }' i& T) }2 ] // changes the heatbugs have made. The ordering here is5 ?2 U* z1 }! K9 w/ v& e9 L; [; U
// significant!' l( k: w) x, T
3 P; i1 t! t% k. t. U // Note also, that with the additional
6 N% v O) R, n // `randomizeHeatbugUpdateOrder' Boolean flag we can
1 {2 w4 Z _, ~2 c // randomize the order in which the bugs actually run1 R; U$ ?% F% |3 [( e) U
// their step rule. This has the effect of removing any
8 c9 [6 q4 h# d5 \0 _, x0 j: R // systematic bias in the iteration throught the heatbug9 D, V# y( M- X" H
// list from timestep to timestep
8 m5 Q$ @% b( A- u0 A" N, a 7 o$ e* N& }' _# ^* y8 v* {
// By default, all `createActionForEach' modelActions have9 [6 \' E! D+ p4 W/ o" v$ ~' A
// a default order of `Sequential', which means that the8 M8 s B V f) Q/ r- S( D/ Y, v1 P
// order of iteration through the `heatbugList' will be8 c. r( P' d. c- V
// identical (assuming the list order is not changed# J" W1 o6 t$ m
// indirectly by some other process)." p% [* }0 o R: I
% }0 @% k! b1 s8 o0 z: ` }6 r modelActions = new ActionGroupImpl (getZone ()); E( t" G. ?$ P1 ?
$ D& c+ o1 C, g. k2 M' I
try {! w: _% I# o: q$ E/ v: |8 C
modelActions.createActionTo$message+ ?' O- S# o6 B( L5 S
(heat, new Selector (heat.getClass (), "stepRule", false));
$ N+ U5 E4 _. c8 A. k } catch (Exception e) {8 [: g+ Q% {8 F/ ?2 _! u
System.err.println ("Exception stepRule: " + e.getMessage ());
" K$ l p" @ R5 w F5 N }% M4 f+ M& ^1 Y* M/ N: T
. N. c! d# t" O8 Z5 k2 C, H
try {- N j0 c) S0 v
Heatbug proto = (Heatbug) heatbugList.get (0);6 m0 o9 T7 o& Y$ L- r# k$ B5 P. E) M! ]3 ]
Selector sel = $ Y# i2 d8 ? i4 o7 ?
new Selector (proto.getClass (), "heatbugStep", false);
% ^2 x0 M# Q4 N. ]2 H9 [( ^# Z7 { actionForEach =
q; \4 M6 v( u# R modelActions.createFActionForEachHomogeneous$call6 Z4 e% P* H# w6 [( o
(heatbugList,
4 a/ r0 ~# z( r3 Q+ }* q new FCallImpl (this, proto, sel,$ A: ?1 a4 L' M
new FArgumentsImpl (this, sel)));- ~* w! Y; i& k4 ]
} catch (Exception e) {
o) s3 {9 n/ w5 F# A- F5 _ e.printStackTrace (System.err);
7 |. l8 g) M& H+ r6 E8 ?, M }
8 q% Y0 K( p: g* }9 H) V/ S$ t 4 K4 I$ N0 j9 t' x# P
syncUpdateOrder ();1 ^: ~9 a n/ F2 c7 d) ~) y W8 E5 x
6 P. Z; k. y' i8 S# {! r' b6 t& B1 t try {' [$ J/ {8 i) q
modelActions.createActionTo$message 9 d- X3 y3 X! o, }
(heat, new Selector (heat.getClass (), "updateLattice", false));: Q. M8 c. o$ z- g5 d3 W3 h8 d$ q
} catch (Exception e) {; b# k8 P; R/ \1 b/ R/ Y* a9 x, N
System.err.println("Exception updateLattice: " + e.getMessage ());
6 Q) O* ~2 @6 u' X8 | }
x; T* x1 e7 H; w$ f : B i/ ?' J. S- ] \ H( J! K0 B
// Then we create a schedule that executes the
2 _: }8 `& W2 I% [5 U // modelActions. modelActions is an ActionGroup, by itself it
- U& B r3 u" f! I8 j& G' J6 { // has no notion of time. In order to have it executed in6 _+ j0 j9 X6 h' Q6 x
// time, we create a Schedule that says to use the! n! r9 H0 [7 d; g a3 ]! \4 P3 o
// modelActions ActionGroup at particular times. This& ]& D0 x! A9 |
// schedule has a repeat interval of 1, it will loop every
8 }/ H7 z a& \& Z. S // time step. The action is executed at time 0 relative to; ]! q+ D; E4 ? `) o5 }
// the beginning of the loop.
: @% L3 A' P( v; g8 Y2 L+ y/ l
$ Q: N5 _- C" K // This is a simple schedule, with only one action that is/ i9 q$ D8 v$ r( b3 V+ O
// just repeated every time. See jmousetrap for more4 f; e# H6 e- \% o( Q- |& e
// complicated schedules. ^9 y5 b& j; }- J0 g* ^) ^
4 K5 d# V2 P/ }
modelSchedule = new ScheduleImpl (getZone (), 1);
6 f( S/ B, W& F# x, T) \' W$ y8 t modelSchedule.at$createAction (0, modelActions);/ ?: T/ t. M4 K1 [# t
/ n* u+ }! m5 i/ c5 u ~9 u
return this;, _, q) L7 s- Y6 V$ \$ U- r
} |