HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 x* V) E2 Z" V8 k3 q" j) [
' J+ [2 S1 N+ c7 J# g9 Y- o4 M& r' \ public Object buildActions () {
8 |! m# @; q2 Q super.buildActions();
5 \ \5 P j. F" r+ |; y
0 }1 G+ z. D7 C( x+ W$ ? // Create the list of simulation actions. We put these in2 K4 m) [* \0 y/ H$ z
// an action group, because we want these actions to be
* j( l, K5 E' p2 T7 i# W // executed in a specific order, but these steps should2 M8 |0 L* N% h/ O3 [
// take no (simulated) time. The M(foo) means "The message% H( T' r7 {9 a a. M( K5 R
// called <foo>". You can send a message To a particular
! l2 @. K/ e4 { // object, or ForEach object in a collection.0 q4 I- P3 M5 ]2 s+ E
t9 e- t- R8 f$ b0 Z
// Note we update the heatspace in two phases: first run; f( ]1 \4 K- v' Y. p: N1 M
// diffusion, then run "updateWorld" to actually enact the
$ ~) u% X9 R: z* [+ M // changes the heatbugs have made. The ordering here is M( L, g$ R/ F ]" ~% m
// significant!
) i* i% H8 {( Y8 t2 O& `. @ C3 p D4 S ; ^1 ?- j5 Y; \9 X- c h$ |
// Note also, that with the additional8 }/ U6 G) \2 O5 I$ j
// `randomizeHeatbugUpdateOrder' Boolean flag we can
' [2 U. F# V, d0 Y( f9 `& A1 S0 d // randomize the order in which the bugs actually run
* H+ P, F# L, t5 O3 x B- G! P# ] // their step rule. This has the effect of removing any
% \% _& a u" {, b6 l // systematic bias in the iteration throught the heatbug' Y, U P, y8 i1 u0 v3 m- x
// list from timestep to timestep
9 E7 z! I0 g" W 0 x$ a3 u; j/ E+ Y0 S* g$ W$ ?: t
// By default, all `createActionForEach' modelActions have
0 v7 c! G) N1 Y4 r" t4 S/ ~ // a default order of `Sequential', which means that the% W, [& d: h! I8 @7 p
// order of iteration through the `heatbugList' will be B2 F& B" M. j5 s- J* ^# u
// identical (assuming the list order is not changed
* j6 J$ L7 n. V( o; i // indirectly by some other process).
0 Q' G' f4 W# D4 N, w0 O; e 8 v+ i& C0 Y- _, f f" ~ u
modelActions = new ActionGroupImpl (getZone ());* F1 w U8 J0 x; {, ?% ~- [
+ O% T5 P T! P. ]* ]$ B/ r try {6 g2 h; ^( x- q9 [: X' H. F
modelActions.createActionTo$message
. i) |1 S4 [ W6 b: A, N3 p$ J" v (heat, new Selector (heat.getClass (), "stepRule", false));8 A& j: k( y, V: M& a
} catch (Exception e) {
7 G. I+ t" s# z+ t System.err.println ("Exception stepRule: " + e.getMessage ());" [6 ?1 J, m6 c) P
}
: U/ G* I1 o+ L2 L/ a& C, W; A
( |; }/ f/ @* D try {
; n7 [) z' _7 W. B! E Heatbug proto = (Heatbug) heatbugList.get (0);
% w7 O: S& T6 w8 P* _- Z" V& T Selector sel = , O# p ~; @( b& p) E- F2 U
new Selector (proto.getClass (), "heatbugStep", false);! v& S9 d9 i/ i+ t2 ~9 {2 K
actionForEach =
; }7 y" l2 P$ W6 e modelActions.createFActionForEachHomogeneous$call
, L5 R* w/ H. v% d6 x (heatbugList,
8 W( p/ A* n# i' w$ A new FCallImpl (this, proto, sel,
; u/ u- }% L' R$ ^! g4 ^/ \ new FArgumentsImpl (this, sel)));% P3 D6 ~ M' u( y# Z0 W- E! E5 O
} catch (Exception e) {
/ N( c3 w% }$ z5 H" E e.printStackTrace (System.err);$ B3 ]. w. q, h; S
}
) t4 B. p6 p0 u/ A0 C( c0 M1 E
9 s* w/ s" J$ s. F* p$ I syncUpdateOrder ();1 C+ v4 B; s8 W2 i2 T9 T& W0 Z _
z" M- \/ t( a0 e4 G6 X* ^$ |
try {; _4 R4 p0 W4 r; v% p1 ~4 Z
modelActions.createActionTo$message
% |4 B; _$ f% t# T/ C. S0 E (heat, new Selector (heat.getClass (), "updateLattice", false));
U9 d o. d# f; k } catch (Exception e) {5 y" m# D! L! p
System.err.println("Exception updateLattice: " + e.getMessage ());2 w! @2 B! Y$ Y" ?! E# r' m) i* B
}2 D+ ^( N5 x5 L6 O8 F7 T
* G: o/ L6 t7 }( ~* n; f3 a% x // Then we create a schedule that executes the
- f# f. F0 b1 g2 T8 M // modelActions. modelActions is an ActionGroup, by itself it, V7 T- h3 M/ {
// has no notion of time. In order to have it executed in
1 ]% O9 l, n5 E7 _* w // time, we create a Schedule that says to use the
4 j4 E: B8 f- m2 z // modelActions ActionGroup at particular times. This
1 a/ P* c7 }+ {7 O/ l // schedule has a repeat interval of 1, it will loop every1 H& k# q1 X" ^1 s0 L$ w
// time step. The action is executed at time 0 relative to+ x4 y" | X0 u2 [" C1 l/ v
// the beginning of the loop.. C7 C& U d9 {- \
1 ?6 y$ G6 {8 s! Z' @1 R // This is a simple schedule, with only one action that is2 e% P' \' m3 I: m1 T
// just repeated every time. See jmousetrap for more
9 ?; O( ?. g y2 | // complicated schedules.% z$ C6 k: Q2 N# J5 X
1 f* I: u- {0 o modelSchedule = new ScheduleImpl (getZone (), 1);
6 b/ W4 H& e: a, i modelSchedule.at$createAction (0, modelActions);1 O5 G3 O8 b2 ~2 }& q, t
" D$ O/ A% i) q return this;8 s8 A; t2 r6 }5 x& F: z7 }: Z
} |