HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; y8 J) d( J7 }2 \" g
+ t9 O: d: ]6 n$ P public Object buildActions () {
7 ^9 ^% T7 d& k1 q* ^. }, P super.buildActions();2 U4 R6 d5 g& @
$ Z$ W3 U7 A- ]8 z! s y9 w // Create the list of simulation actions. We put these in& b d1 J2 o' O @4 ] P v
// an action group, because we want these actions to be
4 u/ i* A" \9 w) x" r$ P$ ?6 g // executed in a specific order, but these steps should% {9 U) d7 v1 @! O/ N
// take no (simulated) time. The M(foo) means "The message' ?3 o, h3 c) U; @) m5 z
// called <foo>". You can send a message To a particular
! `( t# x$ r2 N) V // object, or ForEach object in a collection.7 ^4 A, [ E z, A0 |: K0 u
" f+ x$ v% }; @2 t" z9 ?
// Note we update the heatspace in two phases: first run
+ s. d3 l- ?2 {. |0 v# H( y3 K // diffusion, then run "updateWorld" to actually enact the
# }* T3 d! p" i8 q; i+ B // changes the heatbugs have made. The ordering here is
2 C8 `' [7 E2 @) ]0 O // significant!
, z1 s$ x! s0 e
$ [: W9 L8 ]8 m( d3 O // Note also, that with the additional
; {1 o# m$ ~6 f+ C1 T2 J: H // `randomizeHeatbugUpdateOrder' Boolean flag we can3 I( J6 ?( A( @/ ]
// randomize the order in which the bugs actually run( B+ D& j; t; e' X
// their step rule. This has the effect of removing any6 `1 d7 m3 Q3 u- \9 i" c) I: l
// systematic bias in the iteration throught the heatbug
& W$ ~$ L; G9 A // list from timestep to timestep
7 ?3 B, j" E9 v7 J 8 U5 M& [/ k1 S8 G8 J! Q
// By default, all `createActionForEach' modelActions have
5 R9 Y; L7 ]; Q# A // a default order of `Sequential', which means that the" a, I0 R! g Y# M
// order of iteration through the `heatbugList' will be# T" W. ?% B4 `# f; v- s: O0 z; C
// identical (assuming the list order is not changed
+ q7 A) K; q m% N$ f; [2 T: V // indirectly by some other process).
8 b- P. i% q. _: r8 f
- u: r0 [8 x! q8 D( `6 Q modelActions = new ActionGroupImpl (getZone ());0 \& ^9 s9 r, [6 n: u
% n, R4 k5 A8 g' l% P. _$ p try {
( h% j3 }0 G3 c! S5 H! ~ modelActions.createActionTo$message
, ?* T9 R. ^3 e: \* }( D; a (heat, new Selector (heat.getClass (), "stepRule", false));
, `1 `+ h( r! h1 j } catch (Exception e) {3 K* J3 `4 }" D8 l% p) v
System.err.println ("Exception stepRule: " + e.getMessage ());$ s8 e% T# k z' ?' k, Q
}+ T" @' h6 r5 v( a
+ F8 @+ K" Y7 y8 U7 M
try {
: X/ b0 s/ i( Q' G& } Heatbug proto = (Heatbug) heatbugList.get (0);6 w, j' U- A; V: M, r$ F% ^
Selector sel = 2 w) R% C) X. s$ k
new Selector (proto.getClass (), "heatbugStep", false);
4 z* ^4 w% N+ W8 i$ g1 r+ } actionForEach =
: w' F! \" j' @# z! f2 X modelActions.createFActionForEachHomogeneous$call
1 f+ m6 H0 K: S (heatbugList,0 @1 U7 x* }& R2 G
new FCallImpl (this, proto, sel,
' }: ^9 W i. E! @ new FArgumentsImpl (this, sel)));& E" C& n. q( {# `# |: d' g
} catch (Exception e) {/ h2 D1 {" U# t7 N# b
e.printStackTrace (System.err);
8 t5 \0 Q a* u: o G# f }: k! [# Z7 J, d$ R) M
# v0 \3 q- H; P0 u syncUpdateOrder ();1 w+ V {. G) ?
7 F# Z9 D2 U7 r& l2 | try {
; b1 [ U$ A' B5 Q modelActions.createActionTo$message
7 ?7 I! i8 z/ c (heat, new Selector (heat.getClass (), "updateLattice", false));" \# l" o/ z1 c- i
} catch (Exception e) {
% \( D! o( C0 J! ^! V System.err.println("Exception updateLattice: " + e.getMessage ());9 V6 X6 a M8 k( s. \0 P
}8 e, ]7 b9 ]7 J
6 ~" A, S: m3 x; E // Then we create a schedule that executes the
! a% o3 }$ O1 H" u // modelActions. modelActions is an ActionGroup, by itself it+ Q) ]4 i+ |% \; }; ?3 |
// has no notion of time. In order to have it executed in8 o- \ e- z& P% ?4 p( G( w
// time, we create a Schedule that says to use the
& G( O! g) g. c" D! @ // modelActions ActionGroup at particular times. This
; ^) v/ k# W; u+ j" T9 i // schedule has a repeat interval of 1, it will loop every3 E: w$ F1 B5 {, D& V; X7 w
// time step. The action is executed at time 0 relative to2 Q+ j1 D6 \% V; t
// the beginning of the loop.
2 L8 }& `4 W8 V
2 X5 j# z# w/ I // This is a simple schedule, with only one action that is
6 g7 C1 {0 z/ K$ V$ G F2 P3 s // just repeated every time. See jmousetrap for more, C, F% i6 V* u* D7 I
// complicated schedules.- Z6 Z2 Q3 }! @, A7 }3 g
; }7 ]# A$ n4 A- {/ i$ e8 |
modelSchedule = new ScheduleImpl (getZone (), 1);
& m- S' C* L5 Q5 w S8 N" G modelSchedule.at$createAction (0, modelActions);6 {4 }( N+ X1 Y
% Z& S3 e/ m8 v' h6 }( d
return this;
$ R- D2 A( J3 z$ l3 X, } } |