HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 @5 I6 i5 j+ P- v( u( g
* K$ k2 F5 D% ?0 d% b+ a. `4 y' G1 Q$ ?, Q
public Object buildActions () { S. w& y i& q4 Q
super.buildActions();
3 M& m6 Z A2 _( ` 7 W/ e6 |- {, J6 f3 M2 L+ v4 z
// Create the list of simulation actions. We put these in& ~2 e% ~1 w- d2 f/ J
// an action group, because we want these actions to be
# \ t5 v; A6 O N# y# u7 Y: V( x+ [: | // executed in a specific order, but these steps should
' K$ F1 }* O9 V. k! Y7 Q! T6 O2 q // take no (simulated) time. The M(foo) means "The message9 Y5 e. `, r. U4 ^5 ?
// called <foo>". You can send a message To a particular# Q. i0 P7 X6 f; C
// object, or ForEach object in a collection.
1 \# P j+ T! I/ {; f+ D
/ a: Y/ o8 P9 H; F: p+ i' g7 E // Note we update the heatspace in two phases: first run* C, e0 B, u: l1 Z9 k
// diffusion, then run "updateWorld" to actually enact the
0 A! G) J7 J. C3 T8 {$ T1 F( ? // changes the heatbugs have made. The ordering here is9 _, a% ?3 J ~& K
// significant!
D6 B( ]( j- s' R d4 X " E( }. l; |5 ^
// Note also, that with the additional
( Q+ H T8 z) D+ g8 I* Z // `randomizeHeatbugUpdateOrder' Boolean flag we can
9 N1 M7 b( p: l* M // randomize the order in which the bugs actually run6 F, y3 ?3 s) w2 u7 I
// their step rule. This has the effect of removing any5 P. z- Q$ f* h
// systematic bias in the iteration throught the heatbug
8 r) ~' D! p% g // list from timestep to timestep2 X/ R, Q6 j. G- y2 |
! N7 e# {$ n7 N. p3 W! [ // By default, all `createActionForEach' modelActions have
5 d7 z& G ?( ?0 `) n9 \ // a default order of `Sequential', which means that the6 g/ [+ C7 l l
// order of iteration through the `heatbugList' will be
8 s5 V5 K! |7 U# Z* n' _% s2 I6 P // identical (assuming the list order is not changed/ O2 Z( v, R- l# f7 x5 y* J+ j
// indirectly by some other process).. i$ p% s+ Y8 V6 a6 H
# |8 z% C' V% @9 W$ x modelActions = new ActionGroupImpl (getZone ());
( H# P0 B' T, f% r
# J0 d% v3 x# K2 A1 M, e try {# b0 X; I; d7 H+ R
modelActions.createActionTo$message
! e5 z& h2 ^% D; [- `6 B2 m (heat, new Selector (heat.getClass (), "stepRule", false));1 m; Q& f4 ?+ t8 v
} catch (Exception e) {
4 L* v/ E7 h3 r |/ C8 ]/ ` System.err.println ("Exception stepRule: " + e.getMessage ());
/ ^- n7 k ~+ L6 E }
`! U1 O* K- Q; O9 v: t" \
# K8 Q( H3 e4 @! { try {
8 e% p4 y' h3 A- w/ _ Heatbug proto = (Heatbug) heatbugList.get (0);- y1 v1 G' y; o2 Y
Selector sel = 5 N- m% s# |# o' V
new Selector (proto.getClass (), "heatbugStep", false);
2 s% m/ m9 z/ u: o" x actionForEach =; W: J& I Z, y1 J! b
modelActions.createFActionForEachHomogeneous$call
' F% L8 n2 C) H; l (heatbugList,7 K, B9 Y5 y0 k$ Q/ t! [
new FCallImpl (this, proto, sel,3 \; }0 E5 m4 E' T
new FArgumentsImpl (this, sel)));
0 J8 d4 J% x0 e* z } catch (Exception e) {2 l; }0 |$ C. }
e.printStackTrace (System.err);
) X! s; |- x' U; v! E- o0 S/ I }
" v$ [# w( u4 k" x/ B# V9 ]
/ N# B. c0 d& [. E syncUpdateOrder ();
) a1 k* Y" w2 w- K* e. h4 _' v' K) ?/ g
try {
1 K+ h$ f' ^- e) k5 N modelActions.createActionTo$message ! ?+ m: \2 h5 i3 Z$ n3 K; P9 o
(heat, new Selector (heat.getClass (), "updateLattice", false));+ m$ `8 z+ C9 c% X, m- n5 x
} catch (Exception e) {
" i# ^3 r% N @5 P) E: `8 n System.err.println("Exception updateLattice: " + e.getMessage ());1 b @, x2 R9 b8 x& B2 b3 H% ], X
}
. ^( q ]8 X0 y% e+ V
9 E4 `0 u1 S. d% A2 t* h // Then we create a schedule that executes the
7 k% F7 {; Q$ h- l // modelActions. modelActions is an ActionGroup, by itself it
7 S+ K! U4 _2 n) c // has no notion of time. In order to have it executed in1 H; j w; V9 e4 a7 n/ z9 K
// time, we create a Schedule that says to use the7 m6 }& x) }& h( A6 W
// modelActions ActionGroup at particular times. This; s- w x ]; f0 d+ B# O
// schedule has a repeat interval of 1, it will loop every# b5 w1 k- ~- H4 I1 U# G+ p
// time step. The action is executed at time 0 relative to
V- ^. A5 K( f/ f4 n // the beginning of the loop.
' d0 d; o+ v& i3 s4 o" X6 _+ C- {
f5 R1 M5 t9 G6 p5 C* v! P0 i // This is a simple schedule, with only one action that is4 e4 k |+ J1 m
// just repeated every time. See jmousetrap for more
' y8 }0 a4 v3 r. U // complicated schedules.
* F! `+ l" Z( \ B& F2 `
5 O6 j& j P$ V9 o5 v modelSchedule = new ScheduleImpl (getZone (), 1);
1 `: i6 U7 ^ O modelSchedule.at$createAction (0, modelActions);
# J$ J: Y# ]$ e9 b( C
/ Q7 s W/ \% i; T# N" K/ B3 h return this;
' s S3 }6 N; ?/ S } |