HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
4 ^( D% n% ^( c! Y( s5 g
# [+ U0 E/ E0 R; U) ? public Object buildActions () {
. c- u- P7 P% D( A# y$ s1 _. t N super.buildActions();
, u- ^) Y1 n1 b 3 M7 u6 X% P" o; L7 c
// Create the list of simulation actions. We put these in
9 R! T9 F* `9 k- O // an action group, because we want these actions to be# f% g1 V5 _9 Q1 I0 J
// executed in a specific order, but these steps should
4 v6 M+ w" m1 P+ x/ x( \ // take no (simulated) time. The M(foo) means "The message
7 s1 V7 ^6 L+ ~: ]7 } // called <foo>". You can send a message To a particular
7 q: d- b6 [3 l( s // object, or ForEach object in a collection.
; c- r) Y9 W6 H7 G" X' J8 k ; }$ \+ a& _, u! \0 _. F3 |) A
// Note we update the heatspace in two phases: first run5 S k$ D# ]8 U# `
// diffusion, then run "updateWorld" to actually enact the# F6 D9 i) r& w8 } i6 o2 l6 t6 Y
// changes the heatbugs have made. The ordering here is
9 i; l0 V6 f8 X) T b1 P // significant! b3 e, Z* T* V, F6 U
- x0 h2 H) D8 B- G+ T9 d
// Note also, that with the additional
* C+ K9 `! K2 U6 v7 L, V // `randomizeHeatbugUpdateOrder' Boolean flag we can
# s& x2 S4 p1 r6 P$ ` // randomize the order in which the bugs actually run
+ R6 S7 x) L F; E // their step rule. This has the effect of removing any
0 `5 J. {0 s) V. I // systematic bias in the iteration throught the heatbug0 ], m( Q1 k( G7 `, v
// list from timestep to timestep
- c2 }& g9 d4 T6 R" j' K 2 T0 D# D7 K# t
// By default, all `createActionForEach' modelActions have
' @* ^. M0 t2 F5 @; U // a default order of `Sequential', which means that the
+ X) U# v0 Y4 A+ I# ?" A/ y // order of iteration through the `heatbugList' will be, J% T# H; r3 g0 F
// identical (assuming the list order is not changed# [; j4 p* [2 f; [4 ^
// indirectly by some other process).
5 t/ n2 z e6 L4 z3 \ ! ]1 {. R m) {. c/ k r# r7 w% S
modelActions = new ActionGroupImpl (getZone ());" v8 C+ } @& L7 G. i. P) _
3 B$ ?5 S# c0 J% P% X& G
try {
3 W% ^8 Q+ `$ y7 l# F modelActions.createActionTo$message3 Q; P% a, D5 T+ w8 z
(heat, new Selector (heat.getClass (), "stepRule", false));
; m( B8 C( `6 e& K7 q% Z X* V7 o } catch (Exception e) {
* b/ T7 g4 q% }0 Q* R4 x5 b" K System.err.println ("Exception stepRule: " + e.getMessage ());
$ |9 c. `( v0 y8 w0 S3 T d }( ?0 W4 s! B: D9 t
1 r0 T1 y: o. V
try {6 W" R, D) F3 o
Heatbug proto = (Heatbug) heatbugList.get (0);2 D% k# l G6 C4 O, V4 y0 |, V! q! L
Selector sel = ! F( m; T" N3 Q. D3 i9 ^; a
new Selector (proto.getClass (), "heatbugStep", false);
2 j" w. y7 c" {' \, y actionForEach =1 `) W0 m% V' ~5 O
modelActions.createFActionForEachHomogeneous$call
) i6 \& i. R' D h1 P (heatbugList,
" F' o3 C) E- X6 H' U+ z new FCallImpl (this, proto, sel,
: [( w3 b9 r( h new FArgumentsImpl (this, sel)));
/ q" s$ j" l; x2 X" z; x- E) @; d# \ } catch (Exception e) {- ^ m D- O" [# e$ J( h* [. W, ]
e.printStackTrace (System.err);( U1 y( y! W) e p/ o6 _
}) H4 L+ f+ h; W3 E+ G! O: }/ A0 N8 G" X
$ C5 G2 l8 K# i* ? syncUpdateOrder ();; {! |' Y) \, f: G, B
: O9 O5 j U7 a0 R/ p try {; ]! [4 \0 ? z9 O3 U
modelActions.createActionTo$message
$ R% J. E1 y. o( L6 E( k (heat, new Selector (heat.getClass (), "updateLattice", false));
" j! w1 b4 o; K } catch (Exception e) {) t! x& t; z' S8 `" y3 B* p- {$ f* u
System.err.println("Exception updateLattice: " + e.getMessage ());1 {& v& ]* c7 G0 f% U
}9 L) ~) n. W! [$ }- [$ {4 z% J# |
7 z! u7 h( d Q' ^
// Then we create a schedule that executes the0 `! ]6 L1 F/ K- N+ k
// modelActions. modelActions is an ActionGroup, by itself it& R( Y; s" C" ]0 R7 G1 h
// has no notion of time. In order to have it executed in6 T# V5 d& t( ?# p8 \0 z
// time, we create a Schedule that says to use the
1 X. ^% G( F; x0 t9 E // modelActions ActionGroup at particular times. This
6 B9 ]; u6 M9 X) J // schedule has a repeat interval of 1, it will loop every1 g6 y, R2 r$ [
// time step. The action is executed at time 0 relative to
7 ` _ D' }4 s+ j; y5 Y3 u* f // the beginning of the loop.* z+ m K; v+ v; A7 J7 }
$ K- h( S1 N0 \5 I7 ~; c' A // This is a simple schedule, with only one action that is
: m4 ~! f) b6 e K+ q2 i9 L // just repeated every time. See jmousetrap for more
2 Q0 n9 k2 d1 w7 ] P5 o- O' P // complicated schedules./ h% f& e2 S& ]. ?$ _' r
. t. q1 o2 k% R6 H
modelSchedule = new ScheduleImpl (getZone (), 1);3 e: _& q" b% S
modelSchedule.at$createAction (0, modelActions);
6 i% x! C/ ?5 R7 ~0 c 1 @+ S6 P; i. k
return this;4 _. d; F! e J& v, f
} |