HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ k( X& w5 H/ P) y! C$ ?
" r% v) o' m4 Q! ?5 a public Object buildActions () {
/ N9 \- \3 F5 Q. U super.buildActions();9 ]/ C0 c, i. G
( u) o, d! L' ]+ I // Create the list of simulation actions. We put these in4 v5 i+ E) W# d' b7 v6 o G
// an action group, because we want these actions to be" K4 [4 n& u' D9 N
// executed in a specific order, but these steps should; g4 D l$ B% r0 q# K
// take no (simulated) time. The M(foo) means "The message m; K1 G0 L+ p
// called <foo>". You can send a message To a particular
! V3 O0 _: i `4 L/ |5 R // object, or ForEach object in a collection., z: a/ u& A" y) y. M+ e2 Z5 W k
4 l7 q; O8 D, l M7 r, m9 P; M4 |2 U
// Note we update the heatspace in two phases: first run+ O; P( B5 f" p9 v2 ~# ?. I
// diffusion, then run "updateWorld" to actually enact the+ Q0 k5 h/ r5 L& E a+ b' \7 s
// changes the heatbugs have made. The ordering here is: \- }4 a8 O/ b
// significant!
' P6 m! p6 z9 k
) v2 v j" r7 {$ p& \ A' P0 a // Note also, that with the additional
+ b4 |2 N3 U1 Q, L( q // `randomizeHeatbugUpdateOrder' Boolean flag we can
6 j3 I" _! m! n) U8 `- D; {5 j' X // randomize the order in which the bugs actually run
# I0 M9 L6 s/ @! j% n7 Q8 ~; e) f1 B // their step rule. This has the effect of removing any
' B" I$ V) g( H2 A% G // systematic bias in the iteration throught the heatbug
3 c$ s! I2 a- h5 ?( B" J // list from timestep to timestep3 ~& H0 }7 W b. s. l5 D. J1 f0 o
0 m3 ]% `) d. F1 q9 {- u
// By default, all `createActionForEach' modelActions have
0 a3 A$ h7 @/ \ // a default order of `Sequential', which means that the# f6 X& ]* b6 J. u6 f5 b
// order of iteration through the `heatbugList' will be
2 T9 C* C( X: t // identical (assuming the list order is not changed9 I0 L' C% C3 M6 C" E5 c5 h0 M) F
// indirectly by some other process).9 k7 ] Q4 ], f6 ]
1 f# v4 G# p- }2 y/ X- f modelActions = new ActionGroupImpl (getZone ());
& }0 O) `1 X/ G1 @8 X6 C D1 J3 h$ q. M3 D2 F- i% ^* A4 p* V
try {/ h; _- t( c k+ [7 |# X
modelActions.createActionTo$message
$ \/ b, Y+ A2 [ (heat, new Selector (heat.getClass (), "stepRule", false));* I9 N& n0 M/ v' A& r
} catch (Exception e) {
5 J8 [# |: |& p0 }' n, N System.err.println ("Exception stepRule: " + e.getMessage ());, J1 G X& M9 D+ s1 G* x
}1 i7 Q i( L: }
, J/ m C+ e K9 g try {
. B8 C" n; a$ R" J# g2 y Heatbug proto = (Heatbug) heatbugList.get (0);2 a6 W0 O& Z0 H( ?$ d$ ?4 T( x
Selector sel =
" Z2 |" D4 E- s: t8 y: s new Selector (proto.getClass (), "heatbugStep", false);/ l9 X- b t* r; U' K$ u
actionForEach =% ~' C$ X {" m# f# @
modelActions.createFActionForEachHomogeneous$call+ d! p3 N/ d, C1 u. Y. `( t. Y
(heatbugList,% `' i7 t4 T, V* @& A
new FCallImpl (this, proto, sel,2 i# \9 j+ b+ N3 p: Z# l: t" h; u
new FArgumentsImpl (this, sel)));
, g2 Q4 V" n2 w) l* j } catch (Exception e) {
! }# a) o% ?# F ]; o e.printStackTrace (System.err);+ v$ f& q! S5 f' o1 ]. y
}
3 k& s1 _5 d4 u
: L- B* }% L" _1 K6 ~ syncUpdateOrder ();
, D+ k$ R5 n% s) O1 Y7 w, X* B/ T6 U. B6 z8 V8 u' H
try {& W2 c _- X% }" R
modelActions.createActionTo$message 6 T3 n6 v( \# g; D
(heat, new Selector (heat.getClass (), "updateLattice", false));
+ d+ S1 R9 \( U, T, O% d } catch (Exception e) {
" \+ ?( e6 A6 m; z System.err.println("Exception updateLattice: " + e.getMessage ());9 q/ d* H6 U) b8 L+ [8 z8 ~, ~' H4 e
}9 X, J2 I2 O# W! W
4 @4 n2 u% {! s/ q9 a
// Then we create a schedule that executes the1 ]- n7 i0 j g3 q
// modelActions. modelActions is an ActionGroup, by itself it
) D; G5 s& q! L // has no notion of time. In order to have it executed in
+ n$ j* X \8 R7 i // time, we create a Schedule that says to use the+ K+ t: [2 O# L9 f
// modelActions ActionGroup at particular times. This
- R, g% Z0 E' D, a // schedule has a repeat interval of 1, it will loop every4 P6 q/ }- H6 F4 a# o8 B1 b D: C
// time step. The action is executed at time 0 relative to
+ n! B4 C4 h* @' [2 w. ]+ X // the beginning of the loop.2 l) h" Y+ Z# Z+ Z" `
9 O* U! _' b# v7 ~+ n- F
// This is a simple schedule, with only one action that is0 x1 T1 U9 M3 t3 n9 l, N! p
// just repeated every time. See jmousetrap for more6 E" l S. N# S2 g G) E
// complicated schedules.
' Y# Q7 @6 G# u$ @2 A* Q( i9 P* B8 H
; B0 z8 h( x! U+ i; y modelSchedule = new ScheduleImpl (getZone (), 1);& K J+ L- W E
modelSchedule.at$createAction (0, modelActions);
t1 S" @& T/ ^0 N& ^
3 R' B' J( a$ u/ P2 w3 X return this;' @& x4 h, h& E' P4 n
} |