HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 u8 [. J8 L/ L9 U, E: C
& X. w0 g; g/ Y( m public Object buildActions () {
4 B4 A0 n, _1 K( G+ X3 Z9 D% M super.buildActions();& ~# v1 k% A0 |) v( U9 ]
/ z7 V. N- E0 U' X) W+ I& {
// Create the list of simulation actions. We put these in
5 k9 T0 I* G4 | // an action group, because we want these actions to be) O3 y2 |) G0 v
// executed in a specific order, but these steps should, e' R0 l- X, ^, [( x
// take no (simulated) time. The M(foo) means "The message
! \7 S6 D. Z3 G8 l7 o2 t! y // called <foo>". You can send a message To a particular5 Q5 ^, y4 ]7 \1 v" q' o# D' r
// object, or ForEach object in a collection.: T# H8 Z0 o4 |+ [4 j! z3 N( S- ~/ d; B
% W/ T( Y! S4 ]/ z% M2 w" |- k; O
// Note we update the heatspace in two phases: first run
s7 P2 C8 I) Y0 O // diffusion, then run "updateWorld" to actually enact the- {5 O/ R1 f+ w: {6 {$ ]; {
// changes the heatbugs have made. The ordering here is
# d5 W; ?2 t4 B2 X // significant!* d& A8 @, O1 P+ l: G4 b
0 M- ^6 g8 q5 a& v% h
// Note also, that with the additional" b# G$ R# I' {. r' f. ]" }
// `randomizeHeatbugUpdateOrder' Boolean flag we can1 Z1 R1 r8 F" h, g4 M
// randomize the order in which the bugs actually run
5 a/ n7 h9 `# T5 q% K) B: j$ r0 C- Y // their step rule. This has the effect of removing any- [# [; @1 j4 L n. `
// systematic bias in the iteration throught the heatbug4 Y1 W& z# M& Z, O1 h2 `
// list from timestep to timestep
) b8 S5 s* v1 k$ @# u N# ~
- m( _: u0 R" L2 [; S* f8 u // By default, all `createActionForEach' modelActions have. d' v. I2 Z3 d) k1 W7 E
// a default order of `Sequential', which means that the% Z: r4 r1 q% c7 m* n4 n! D4 Z
// order of iteration through the `heatbugList' will be
, x0 [$ ]) J9 s | // identical (assuming the list order is not changed
7 t9 b8 ~9 r4 [ b1 R // indirectly by some other process).+ L8 y X: Q& d
6 H$ e' {) Z0 k% l
modelActions = new ActionGroupImpl (getZone ());9 t* U/ r5 M3 _ ?2 R' h" t6 m
8 W1 i# b, m9 u try {; X0 T# M+ a7 P7 ]
modelActions.createActionTo$message1 w) D! [ A1 k9 M0 T: |8 e4 W
(heat, new Selector (heat.getClass (), "stepRule", false));" R# t1 a8 K' S0 {( m# w+ g% O
} catch (Exception e) {9 g/ {' c6 {+ I( W
System.err.println ("Exception stepRule: " + e.getMessage ());
x; B! X+ d9 j+ b; G& `: t/ ~, B+ e }
4 C- v" m' p. Q( a5 e7 d2 w& h1 \. b. s; {7 }
try {: k: b2 V2 Z+ u
Heatbug proto = (Heatbug) heatbugList.get (0);
* G/ D; Y" Q+ A# b+ L Selector sel = , |. s0 ^' B/ }0 @2 b
new Selector (proto.getClass (), "heatbugStep", false);- B2 c* O& V7 r$ o; b
actionForEach =4 t4 v; q A- `# D5 ~
modelActions.createFActionForEachHomogeneous$call
5 x9 Y9 b+ q: i9 G o6 V. A (heatbugList,
" f, }- ?# s% r: L6 c3 U4 K6 a new FCallImpl (this, proto, sel,
+ J1 g2 B+ p7 {) U0 _0 r new FArgumentsImpl (this, sel)));
6 D9 J- t" E, q9 _! O7 t& g, b* I6 Z1 K4 l } catch (Exception e) {5 o6 C2 ]% m9 k H0 x1 U
e.printStackTrace (System.err);8 g& M8 O, v0 o0 d# `# N
}
+ Z8 t! ^" F) K" H# V' D, s
7 o& }6 Q: d5 n1 e syncUpdateOrder ();! N4 G* W" i6 \4 n' R% c! S, I
$ E: B z( d& f: u' _ L try {
! H- H6 ~: p6 E/ L- s modelActions.createActionTo$message " R" s% g! q d, s3 K# l( t
(heat, new Selector (heat.getClass (), "updateLattice", false));
# {0 |2 y4 q6 Z6 A3 u } catch (Exception e) {
/ Y* i: Q e1 L0 L System.err.println("Exception updateLattice: " + e.getMessage ());, l6 l% d; N: z( r
}
) u$ Q$ A/ Z* M: a }# k
- g7 G) h ]# @8 n6 e( p$ V // Then we create a schedule that executes the
+ v3 i# h4 N, b9 W P( s$ `' o // modelActions. modelActions is an ActionGroup, by itself it: F3 `/ n8 r* x! b, i
// has no notion of time. In order to have it executed in% n3 S' v- S, a2 o8 {
// time, we create a Schedule that says to use the( Z: i: |- h! q5 \) O5 I
// modelActions ActionGroup at particular times. This( X: t7 v; E! b7 Z, g* i
// schedule has a repeat interval of 1, it will loop every
* l) _+ b% k* b; Z+ I // time step. The action is executed at time 0 relative to, N5 U% S- i5 m+ p# j; p2 H9 f, o4 P
// the beginning of the loop.0 E+ i% F! u$ g/ d
# t" T. X' m6 s0 M y6 l // This is a simple schedule, with only one action that is
( d' V) b3 O' ^0 R // just repeated every time. See jmousetrap for more
_* d% l1 ^9 ?2 x, I // complicated schedules." b2 ~- D6 A$ \
" T5 F- b3 z7 O! I' s, k) V+ n1 g2 v
modelSchedule = new ScheduleImpl (getZone (), 1);& r+ I. ?. t6 |/ B" f* r5 R
modelSchedule.at$createAction (0, modelActions);9 Y" O) y8 o; G+ H" V5 V
4 N: y( @' d2 @% [6 c( W return this;* l) c7 @* h& o$ q; n
} |