HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. e2 \8 O4 J+ p M, d/ u2 Z9 j' _; Y1 I
public Object buildActions () {
+ ]& T. N. L2 B& O super.buildActions();1 G" I+ H$ y, M. y( ~- b
8 W8 c& u; o# {) |
// Create the list of simulation actions. We put these in
% r7 m4 Z/ M" a5 I/ L // an action group, because we want these actions to be, v3 n+ G/ ?! |! J
// executed in a specific order, but these steps should
7 Q, {# d# d6 Q _, t% ]$ t# r5 z // take no (simulated) time. The M(foo) means "The message) V8 {1 B, X. ^; }! \8 h
// called <foo>". You can send a message To a particular
J; O% [. A- M i7 Y& z // object, or ForEach object in a collection.
, M5 t" H; M4 S; F. M % ^/ i/ r/ K: W( P# `
// Note we update the heatspace in two phases: first run
! K ^" k0 H# F // diffusion, then run "updateWorld" to actually enact the% l8 ]- p: ~* d# ]; q# P
// changes the heatbugs have made. The ordering here is
+ g( c1 Y0 }8 h( J2 @ // significant!3 z7 L/ z/ I3 w+ d: L8 W
) D; b" D4 D5 A. v( | x // Note also, that with the additional
- r* z# J2 k) @# j' d0 ` // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 t. w2 W& |( i& c( p6 \ // randomize the order in which the bugs actually run
' V/ t% @$ m% t# W5 V) J$ A! f2 T // their step rule. This has the effect of removing any/ v/ v; a3 X% P J
// systematic bias in the iteration throught the heatbug
, U3 k* H: ?2 x4 @$ p+ d // list from timestep to timestep
+ w) S" I" [' c, E& O+ p 4 O; x* }: j* S) V4 ]3 c
// By default, all `createActionForEach' modelActions have+ n' T' V# ~. O4 ~9 i1 ~0 d" x; n# A
// a default order of `Sequential', which means that the
4 J$ B+ p" p1 P& b0 C0 l // order of iteration through the `heatbugList' will be
( J! X6 m# y2 D& s // identical (assuming the list order is not changed$ [$ u4 ]) S8 j2 L
// indirectly by some other process).
/ l. o0 {& b. x' X( i' w) N1 k
9 O Y4 \; \3 l2 F modelActions = new ActionGroupImpl (getZone ());
' B9 U, P/ S; |" k/ y; b$ t5 B: F% b) d
try {
5 H6 G n4 P8 `* ~6 e modelActions.createActionTo$message, \1 ?5 t1 P) J. v8 [: w: z! E1 A
(heat, new Selector (heat.getClass (), "stepRule", false));
2 T- N/ O0 [6 e* p( O } catch (Exception e) {
* [( S& v, C1 j System.err.println ("Exception stepRule: " + e.getMessage ());
& @& R8 O6 v3 `2 Z% l" G }
7 ]; ?( a$ I5 O) ^$ H8 u; Q& h6 A( b. p* J& {# f# D# R
try {8 N. T9 `, j6 U0 X5 ]1 g
Heatbug proto = (Heatbug) heatbugList.get (0);
' d/ y- n( p9 k5 {; [- L Selector sel = 7 \- p' {, m+ U6 i+ F5 U" p
new Selector (proto.getClass (), "heatbugStep", false);
7 {4 R+ F! X. `$ S8 o+ {8 P actionForEach =3 P# S7 m6 {$ D; O. r) v* Q( t! S
modelActions.createFActionForEachHomogeneous$call
" _5 {- r- N# t2 M (heatbugList,: _, @, y; i1 r. l- R6 ^7 g
new FCallImpl (this, proto, sel,
8 T' X1 y% B2 E/ J/ W8 L7 p new FArgumentsImpl (this, sel)));
7 u7 F) \) z4 ~* `. H3 Q; ? } catch (Exception e) {
1 D7 t. Z! Q! @% ] e.printStackTrace (System.err);
: }( U: d* T4 @& W, ^7 u( z5 c }: T d! N# v3 @* b6 {2 ?) G; Y
! w2 A, V' X# W0 r. V- R+ G+ V
syncUpdateOrder ();
$ \$ c P7 m! |) Q8 i
; H( `( N/ Q& P* r try {2 v% }6 l. I4 Z2 {
modelActions.createActionTo$message
9 l) M6 O( p% x& s2 R (heat, new Selector (heat.getClass (), "updateLattice", false));
+ L; C& T- e* k- }% ?( o5 V } catch (Exception e) {" ?" V3 u, H" t$ ?* d
System.err.println("Exception updateLattice: " + e.getMessage ());$ L3 i* C" {' U; U. K
}2 V' F! F9 x' `, v
+ Z* P% D- u' b // Then we create a schedule that executes the' {$ g/ E+ L: y! l9 y, u! B: c" _
// modelActions. modelActions is an ActionGroup, by itself it( n8 v- s% H3 q' w& L0 ?6 b9 k
// has no notion of time. In order to have it executed in$ a" B! H; H2 q1 L- ?: q0 D& \( h7 j- A
// time, we create a Schedule that says to use the
" }# A4 ^0 e" C/ F // modelActions ActionGroup at particular times. This
- z( \/ H! [- O# M // schedule has a repeat interval of 1, it will loop every3 B; `% P" B9 a2 k" Z8 p0 g
// time step. The action is executed at time 0 relative to
. }% r9 m) y5 T5 g // the beginning of the loop./ I* {7 X9 W- C5 ?
4 a! `! E- F/ e! S4 q" y1 U _ // This is a simple schedule, with only one action that is
: L7 u* U. j2 T' d // just repeated every time. See jmousetrap for more
# @8 Y; j, O6 \# V5 [2 M& [ // complicated schedules.
8 B: h# Z5 Z; ?
# i% T7 ? Y' F! | ^( c modelSchedule = new ScheduleImpl (getZone (), 1);
0 a1 x- H$ p# R' c7 _" W modelSchedule.at$createAction (0, modelActions);* M3 ] E. O/ n/ Y( {" C, f$ H; O
k* l+ @5 V! o* H! S+ r return this;
$ n, [; W* K. [* V" G } |