HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% Z/ {, X2 Z! w- H+ D0 f2 U9 t
/ u7 r2 V" D( O, z" Q7 U: j public Object buildActions () {
6 D8 Q F; t! L. t super.buildActions();, Y) s, K$ @9 S0 A
! R ^ [; W5 y# P // Create the list of simulation actions. We put these in
7 E$ j/ U. I. f7 ]5 _& ~8 k // an action group, because we want these actions to be
+ a8 ^9 K9 v+ T- @: a$ z9 _ // executed in a specific order, but these steps should9 @6 u5 s8 N2 ~2 G% [6 X
// take no (simulated) time. The M(foo) means "The message) U0 w, ~" `( c# _* u9 T* H2 L5 p
// called <foo>". You can send a message To a particular9 N6 J% ]* o2 ~. u' v
// object, or ForEach object in a collection.
! l; X9 j5 p- A$ B$ j
6 e' _' }" D/ ]! F) C% W# K // Note we update the heatspace in two phases: first run9 d9 ]: k) v, Z0 U7 l9 l2 c" L
// diffusion, then run "updateWorld" to actually enact the
" y9 A8 ]8 J' C% L) ^ // changes the heatbugs have made. The ordering here is
. I+ [ y: m5 v J0 P& X$ h7 Y // significant!! g+ y! C3 H O. D0 N4 M
3 n3 j6 h& R i) I" Y
// Note also, that with the additional
0 \9 o% @3 A) G // `randomizeHeatbugUpdateOrder' Boolean flag we can% {' a# Z/ R/ d/ r' u
// randomize the order in which the bugs actually run
3 L @' l7 H* n' N" d% \% p; W. R // their step rule. This has the effect of removing any% Z7 D- k0 c- e( C+ i
// systematic bias in the iteration throught the heatbug
' ^) N" C" L: q% h$ y8 l // list from timestep to timestep
: t! P5 i6 T: z }& q
4 S6 ?8 S+ S) g5 Q$ i* K- V* O // By default, all `createActionForEach' modelActions have
( u! L4 H) o( |" s // a default order of `Sequential', which means that the
; G' Y# n4 O, C // order of iteration through the `heatbugList' will be; o' H- ~0 }1 ^ q
// identical (assuming the list order is not changed e7 S# d8 Z5 l, q: H3 ^
// indirectly by some other process).
+ w2 L3 R: f/ Y8 ~
& t! T( U, u% m) ] modelActions = new ActionGroupImpl (getZone ());
! v& q4 u: ]) _) D3 }# M/ t: b E: M% N& G6 |: ?
try {. c2 l# \) @" q
modelActions.createActionTo$message
# s S4 Q2 f; X; L4 u (heat, new Selector (heat.getClass (), "stepRule", false));2 D; Z$ T. L6 H$ Y2 r1 Y
} catch (Exception e) { j! p7 q* v1 r. s. R
System.err.println ("Exception stepRule: " + e.getMessage ());' l ], _* m% |9 \9 Z' J3 u" H
}
4 ]" J) A, n: i7 f; H
7 Z% H b/ b4 r1 P9 C& G try {
. E& A5 F) n! C" M Heatbug proto = (Heatbug) heatbugList.get (0);
\/ o3 I: o3 } Selector sel =
1 C; y( c7 M5 ^+ p new Selector (proto.getClass (), "heatbugStep", false);& W; D; y/ I, e j4 j2 v5 [
actionForEach =1 y6 a7 [6 b P0 r4 V) y6 V
modelActions.createFActionForEachHomogeneous$call
/ U+ B# w5 M. w6 Z& o (heatbugList,
# J$ f! x% y/ T Z* D: W3 } new FCallImpl (this, proto, sel,& s* A5 g$ h5 t% E. B
new FArgumentsImpl (this, sel)));
1 Q& Q. Z, Z( I* M% d$ R$ f# z } catch (Exception e) {
7 J) y' R& S1 z6 { e.printStackTrace (System.err);$ T& o N1 `% d3 e4 t6 B
}
# t3 |; p! Z" E. O 6 l9 Y3 J9 p7 g. k
syncUpdateOrder ();+ o" m8 g8 R/ Z, J( ^% T
T; d7 q3 g8 w; w Q# [! V N) U$ h
try {9 b! V& k+ e) C, p5 ]0 c4 f- D
modelActions.createActionTo$message # {! d3 c/ E- x+ ^: z& q
(heat, new Selector (heat.getClass (), "updateLattice", false));
) y, ]7 z$ I; Q! q. q } catch (Exception e) {9 T6 a" Q- S0 s# ~% X
System.err.println("Exception updateLattice: " + e.getMessage ());3 t! l" k( U+ K5 t, e( I& M0 g& s
}0 N1 E. ~. d+ a* M- p+ y& Y
" z% V/ V' y* n) E6 U2 X // Then we create a schedule that executes the l/ B- ?# G' t4 A- ]4 _
// modelActions. modelActions is an ActionGroup, by itself it/ @( [& T+ o: K; S* R, h0 g
// has no notion of time. In order to have it executed in
I1 k2 ~* r9 G2 a: ` // time, we create a Schedule that says to use the
# ]# F2 Z/ V1 \) c5 ` // modelActions ActionGroup at particular times. This
7 Y4 X( S6 A/ E1 Q/ X$ ]& u) ? // schedule has a repeat interval of 1, it will loop every4 v* J9 K* y8 S6 Z; |, t3 G5 J
// time step. The action is executed at time 0 relative to- }) P( L F6 N, Q& z" {6 j
// the beginning of the loop.
4 O P1 X7 N( s: o5 R5 p k7 A/ y8 q' j
// This is a simple schedule, with only one action that is% g3 O, A i8 P% {
// just repeated every time. See jmousetrap for more3 d+ ]* f' @$ n) W% j! u$ e! m
// complicated schedules.
1 b* H4 C2 p! z5 [/ j5 f8 _$ t+ X* A
. [; x4 d- k, w" o3 A% j modelSchedule = new ScheduleImpl (getZone (), 1);
. Q5 h; |0 Y8 I* J modelSchedule.at$createAction (0, modelActions);$ T+ [: y' O" j0 H
A! M2 A) _. \
return this;
, e3 [1 W7 f% A } |