HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 z# ?: U, ]% u5 f( g
6 c7 F; ?' l. O5 T9 I2 L) ~# X public Object buildActions () {, d/ k( f3 l/ p, p" W
super.buildActions();
) u$ ]2 _$ v8 {$ I$ W: a1 G; w9 h 1 ?7 B3 v# y/ {+ q; O" I2 |
// Create the list of simulation actions. We put these in/ T* |4 ~5 d! g( y) W
// an action group, because we want these actions to be
% [8 ^, _/ j( @3 ~% ], [ // executed in a specific order, but these steps should: u7 _. {* n* E* b( S
// take no (simulated) time. The M(foo) means "The message
5 M$ h+ U0 W$ Z // called <foo>". You can send a message To a particular
6 g# j3 z* G" b \$ N% Q6 \+ ` Z/ e // object, or ForEach object in a collection.
0 I) r' O) o' _" x 8 r( P# L3 ^* n, i( L/ A2 N0 e& W9 k8 K
// Note we update the heatspace in two phases: first run
; x" k' I3 P, s' g1 f$ O // diffusion, then run "updateWorld" to actually enact the
6 D& `9 K+ S/ T! D& } // changes the heatbugs have made. The ordering here is
) M3 Y0 O) l) t- u# G // significant!
( D/ _( v/ J2 J& D, d
: ?" i2 W& ^1 I* K) ?; Z7 G- V // Note also, that with the additional" W' `, p$ m5 M' I5 _" ^2 W+ m
// `randomizeHeatbugUpdateOrder' Boolean flag we can% T ^: G/ N2 R, D" W, P; s& T
// randomize the order in which the bugs actually run
: E0 ~8 ~4 F- n3 e" F8 R // their step rule. This has the effect of removing any& o; j" I- B1 S: R/ `! T" n
// systematic bias in the iteration throught the heatbug
. S% f8 G# ]& Q3 M+ s' V/ \7 } // list from timestep to timestep
' s6 D* Z5 `6 V$ T$ l5 w$ h% |# z 2 p) Z- V; M6 [; ^4 ~& M4 a' x
// By default, all `createActionForEach' modelActions have3 L3 ~: c- F. H6 |. l! }: n
// a default order of `Sequential', which means that the
0 y7 `3 ~% x" @6 q5 ~ // order of iteration through the `heatbugList' will be/ R/ a7 Z( |' S |
// identical (assuming the list order is not changed7 h! [) K* o/ `; n8 i- S
// indirectly by some other process)./ R7 c. `' ^4 P& b
$ \* K/ ~7 m* c2 ?" x0 w1 [ modelActions = new ActionGroupImpl (getZone ());
; I4 k# N: x; r. \9 e8 E5 D' x2 l- K% @
try {
! q! F# b) Y5 d# o modelActions.createActionTo$message# S5 w+ g) ]; ^2 S* d, a4 U
(heat, new Selector (heat.getClass (), "stepRule", false));/ Z4 x+ n( @! q: N3 l
} catch (Exception e) {
! t; C2 g: h, n' x5 R System.err.println ("Exception stepRule: " + e.getMessage ());
% [+ J e M9 V1 B# J+ {9 ] }
. c/ A; Y& W" s& W3 h; g ~4 e: ]* _# _' D4 ~) K
try {
, K" g6 h& n- ~# r" [ Heatbug proto = (Heatbug) heatbugList.get (0);" x; A: l" k8 D
Selector sel =
* o" P( W" Q' V new Selector (proto.getClass (), "heatbugStep", false);% s3 c, H1 w5 z. P6 g) k# d0 m U0 _$ l
actionForEach =" q" R h5 p6 ?$ p2 o
modelActions.createFActionForEachHomogeneous$call7 C7 t$ B$ v. n3 K' ]" c' Q0 N
(heatbugList,/ X. C! _$ X7 C3 [9 N3 @3 I0 n- j
new FCallImpl (this, proto, sel,
% \, b& Y( h% t0 r. t new FArgumentsImpl (this, sel)));
6 Z1 N) E6 ~7 }% J8 C- s } catch (Exception e) {
" i* X4 k% } x6 v1 M e.printStackTrace (System.err); g" L2 r+ h- c' e8 t) F) J8 x
}# [' X/ E/ J$ |8 y' n' \( `
- w) u. S+ U8 h syncUpdateOrder ();$ O x9 Z5 f4 |# i
; B+ s- G: j# |
try {
5 n: ^" G b" U* v% r modelActions.createActionTo$message
5 e* X- t, s f (heat, new Selector (heat.getClass (), "updateLattice", false));3 Y9 t8 T1 J" [ ]
} catch (Exception e) {) F, N& f/ X$ T7 o
System.err.println("Exception updateLattice: " + e.getMessage ());
1 v {1 j, `& Z! [ }: ~5 g6 H+ m Y/ Z8 J3 r/ v
; M. _" V6 N7 _7 \- l& A S
// Then we create a schedule that executes the
y* G7 }2 s' ~: | // modelActions. modelActions is an ActionGroup, by itself it& v' o& o' r4 i& |- j
// has no notion of time. In order to have it executed in
7 z& _) |1 v" _ // time, we create a Schedule that says to use the1 f- J4 D. F/ g- A
// modelActions ActionGroup at particular times. This
% k9 o6 K/ g5 e // schedule has a repeat interval of 1, it will loop every
0 F1 ]! Z. {- V( y+ H* ?# l: E+ C // time step. The action is executed at time 0 relative to
& Q" ]# F% t# O // the beginning of the loop.
- R$ | O0 C, W' }* H' b- c4 E4 M( Y! Q. W& s) F; C
// This is a simple schedule, with only one action that is+ A5 h& L8 `7 ~% s3 v0 O' Z0 ?
// just repeated every time. See jmousetrap for more
$ O; r+ m" I- t! j: `: Y4 i // complicated schedules.
' x/ v( |+ V7 }5 t : c) o: F! P& Y$ h& H
modelSchedule = new ScheduleImpl (getZone (), 1);4 h) k) Z& N0 ?) b" C: X
modelSchedule.at$createAction (0, modelActions);
! H/ W, |3 H6 I- ?& T# } 5 J( _) q$ N1 d% U
return this;
/ ]5 Q- r0 P# a5 @ } |