HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ U! A4 X: h9 n: i
& C; S/ z/ P- S- F public Object buildActions () {& m6 C- ^; i4 S9 W8 I+ s
super.buildActions();- \9 Y1 k4 G9 ]8 a
. b. l) c9 t- S0 E- F
// Create the list of simulation actions. We put these in
, q3 |% \- e; r // an action group, because we want these actions to be
3 _+ A) o& W# o! H+ ~ // executed in a specific order, but these steps should
4 u+ Q, U8 I8 V: l# W% S: ? j // take no (simulated) time. The M(foo) means "The message
* p6 K- o; _6 d0 m* P$ H // called <foo>". You can send a message To a particular: c0 {- I2 j6 O& y+ A1 \
// object, or ForEach object in a collection.
: l) P* A7 w, L) d 5 g( t2 {( g' E/ X
// Note we update the heatspace in two phases: first run! b; V9 \* o0 \% ~
// diffusion, then run "updateWorld" to actually enact the
5 o. A4 X! n2 {1 l! u // changes the heatbugs have made. The ordering here is* E8 O0 r; l, ^, F; O
// significant!% x$ A5 U: n j5 S4 _- N2 u
% l9 Z* z8 k5 k- y3 Q" N, i
// Note also, that with the additional, F& t! k; T `+ u
// `randomizeHeatbugUpdateOrder' Boolean flag we can0 h8 Z) S1 j# w" Z, f
// randomize the order in which the bugs actually run
! c( |% H' x# t$ [- L // their step rule. This has the effect of removing any6 G( r& x0 b# K
// systematic bias in the iteration throught the heatbug/ J3 I7 m4 o( E
// list from timestep to timestep
% {9 ^# R7 ^ K% V/ X! u: v ) l) {4 Z% h0 L8 e' g! e9 C
// By default, all `createActionForEach' modelActions have# C; T6 z4 G5 ^2 V! C
// a default order of `Sequential', which means that the
# q7 r) e+ [- s# s6 W // order of iteration through the `heatbugList' will be
" R$ x! V; V# E, h: X // identical (assuming the list order is not changed
# G. O6 {$ F7 C5 w- }: j% t& G // indirectly by some other process).1 W6 q3 @$ C6 k3 l$ M
7 b2 U+ U# Z5 P# } modelActions = new ActionGroupImpl (getZone ());
8 @- V* ~1 L: y+ Q- n+ z7 r& L. [8 v7 t# M3 @$ l5 }$ z$ y
try {9 t2 \( n( o# R% O
modelActions.createActionTo$message
6 `6 i. }8 m. y6 ? (heat, new Selector (heat.getClass (), "stepRule", false));/ R2 A& z0 g0 @) G( j. C6 m; E+ A
} catch (Exception e) {: R/ _. {2 I$ }$ e
System.err.println ("Exception stepRule: " + e.getMessage ());
. t3 V; g" c- y }- y* A, H5 d+ L! Y. o. d5 W% l2 V
; c! P7 c, |7 \/ b6 a' G try {! G/ ^1 b" I# }, V
Heatbug proto = (Heatbug) heatbugList.get (0);) q( K( Z; K4 {# d% b8 a
Selector sel = ' S% [' N& K: n2 k. E/ `2 k5 B
new Selector (proto.getClass (), "heatbugStep", false);
8 u% }% S4 m( C actionForEach =( Y, Z0 y" Z# V0 l7 @# I! Z
modelActions.createFActionForEachHomogeneous$call
& b' ]$ K6 ~6 M; Q1 ]1 n2 D& ~ (heatbugList,
( Q! o9 c$ L3 [! h& r; Y new FCallImpl (this, proto, sel,
3 w; K5 e) [4 J8 p* b7 M A new FArgumentsImpl (this, sel)));
2 b0 z$ u5 F0 H8 a& l } catch (Exception e) {
! @2 T9 `- O7 E/ P. ~. L. } e.printStackTrace (System.err);
$ I8 m6 ~ P% m; @6 B }7 S" d5 B" e6 e2 K5 T$ A
/ W8 R' w& a5 f; n
syncUpdateOrder ();
, C1 O3 L8 E6 |" L& i8 R/ @3 Q) }, L* H4 u& {
try {# N! J1 z% F. b1 g6 a
modelActions.createActionTo$message
9 n# V# D' u4 | (heat, new Selector (heat.getClass (), "updateLattice", false));
5 W5 Y6 _) s% ?8 ~1 D1 {; E" T } catch (Exception e) { I+ q& E \( t& R8 K
System.err.println("Exception updateLattice: " + e.getMessage ());
9 r) X0 b7 _7 s4 v& C. f2 H8 O }
5 x6 m. B' ?) e( A G$ S 6 q" x* E$ z( Y; K
// Then we create a schedule that executes the* t5 u" k+ ?, Y/ c
// modelActions. modelActions is an ActionGroup, by itself it
. c6 Z6 x( a, W) ^3 F // has no notion of time. In order to have it executed in6 O4 D* a, q7 G7 L/ O+ i$ D
// time, we create a Schedule that says to use the6 ^3 L' n+ e6 ^0 a9 L" |9 v
// modelActions ActionGroup at particular times. This- J g! l# n) p2 G$ {7 S
// schedule has a repeat interval of 1, it will loop every# Q% t7 [* O( J% h% ^" f
// time step. The action is executed at time 0 relative to
* c# ~& R9 c+ n // the beginning of the loop.
4 x; J+ G7 \. S5 K
8 F5 C" _% r4 r6 r2 N- ] // This is a simple schedule, with only one action that is
9 [8 j0 e: i% j: ` // just repeated every time. See jmousetrap for more E1 \' ^( a _' i F; N
// complicated schedules.1 q Y' W5 e8 a" b9 \( }7 p2 C
& U6 o8 k; m8 B$ A! i6 T% w7 Q% t modelSchedule = new ScheduleImpl (getZone (), 1);
6 d3 W8 }1 F5 @% G4 E* z x/ S! I modelSchedule.at$createAction (0, modelActions);
; ~. o2 ^3 ?" n
' H8 \9 _& L( C return this;) f$ ]/ v# U: a3 r* p$ `% b6 ]1 F
} |