HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
5 h: w, `# z3 n
2 O# j9 C, h7 q1 f$ r1 A: I+ Z public Object buildActions () {' B N4 S7 @* _; m
super.buildActions();* g$ n9 v+ o. V# Z2 N; X4 S
0 v+ c+ o9 q% e9 P# h* W // Create the list of simulation actions. We put these in9 D- e" j5 S% s" d9 U E
// an action group, because we want these actions to be1 R: c" c% y$ j1 V; u/ Z
// executed in a specific order, but these steps should) d; i) \1 I( z+ z; S
// take no (simulated) time. The M(foo) means "The message4 O, F% u! w3 V8 M, W* |. C
// called <foo>". You can send a message To a particular
5 O. \& Y: z. \ // object, or ForEach object in a collection.' P4 y P$ W; f; D0 h+ Q
- \# I* `& w" }7 T
// Note we update the heatspace in two phases: first run+ h) Z9 T1 g; {- P. n
// diffusion, then run "updateWorld" to actually enact the) u3 H% V+ E) J( E& W
// changes the heatbugs have made. The ordering here is/ n! x! Y' z, c1 V
// significant!
3 ^+ s) o3 k5 S$ B( J
) k* r5 `% @+ Y8 L; d& C // Note also, that with the additional
9 `, J% K: P% G$ a9 Z5 W8 W // `randomizeHeatbugUpdateOrder' Boolean flag we can
7 ?: T% }, ?9 F# k) o; L2 [ // randomize the order in which the bugs actually run, X: X h, u! N& N. F( z& e
// their step rule. This has the effect of removing any
$ J' Q; V+ J% f // systematic bias in the iteration throught the heatbug
3 B' r! w+ N0 z; f4 Q+ X6 v // list from timestep to timestep( r8 r" l# {% k# ^" s) d6 [" P
6 c5 s( A4 i) N; D; M // By default, all `createActionForEach' modelActions have& O q" _3 l) F; k: \2 Y0 G9 _& r
// a default order of `Sequential', which means that the- e( K% ]6 q* f$ \# w4 ^: l/ j* ?
// order of iteration through the `heatbugList' will be" z! H" Z/ c5 S
// identical (assuming the list order is not changed) J; Z, Q2 I G0 p. h' s
// indirectly by some other process).
' h: _: f/ Z' C9 @3 ?& C5 o ] 4 A0 b P& O7 H" [8 q% z0 G
modelActions = new ActionGroupImpl (getZone ());
- q- H, U O x m8 n8 a' c" o7 I) M- K! v: I! b$ K: ]* H
try {
1 u. {) K# ^4 d8 r modelActions.createActionTo$message
) ^2 L+ Y5 l) l( O7 Y+ ]1 b+ j (heat, new Selector (heat.getClass (), "stepRule", false));
% U8 e( o" q2 p7 L } catch (Exception e) {
) B4 R8 q- j- t* o4 E; Z System.err.println ("Exception stepRule: " + e.getMessage ());
5 |3 d; K9 ]+ X$ M. Y, f7 I }. q! _/ s* Z% ?6 L2 I
) [! U. U9 G Y5 [$ w- Z
try {3 A T% ^' D7 `' r
Heatbug proto = (Heatbug) heatbugList.get (0);" W' L0 v% Y: O( h# A
Selector sel =
9 g9 [, B+ K/ z9 h0 I& H new Selector (proto.getClass (), "heatbugStep", false);& u6 T9 A# o; W7 M8 p
actionForEach =
: f; I3 h& k$ ?& P# q& X: F modelActions.createFActionForEachHomogeneous$call
0 g. ^4 H1 |5 f- ~ (heatbugList,3 r# \) O& |& W, }( W; x
new FCallImpl (this, proto, sel,
1 r: j7 I1 }9 _! F% E new FArgumentsImpl (this, sel)));" @( Z7 D2 Z' I( N
} catch (Exception e) {# u0 h( t* E1 x. R
e.printStackTrace (System.err);
' O |9 f$ {# d) V }1 n/ w3 T2 q7 I& ]2 y! |
6 v# S$ h; R4 S+ f* P. k- a A! h
syncUpdateOrder ();2 v4 z% F, R. X, s3 Y
8 o& G P8 k+ T% G* I3 u
try {! Q1 L9 D- c: k% @8 [
modelActions.createActionTo$message 4 N; ]: ]9 S8 b! E
(heat, new Selector (heat.getClass (), "updateLattice", false));% F9 Y7 Y8 g- _ U9 Z5 e2 v. ]
} catch (Exception e) {, N! A( o& K1 d8 m' ~
System.err.println("Exception updateLattice: " + e.getMessage ());
% [$ v( n* o4 I9 P3 _ }: E4 \' k! ?. Q% Q" }( O6 N7 f8 h( z
& K* Y4 J( A8 @9 R% i( U4 | // Then we create a schedule that executes the
% p: b: g# l( }- t8 j // modelActions. modelActions is an ActionGroup, by itself it
, \% m' P) g; q% `& o+ I // has no notion of time. In order to have it executed in+ l$ R% D- O5 c6 N0 C
// time, we create a Schedule that says to use the" t/ m. ~6 L* p2 u. k7 S4 _8 `
// modelActions ActionGroup at particular times. This
# n- R3 R2 f! b# i% j. k! ? s // schedule has a repeat interval of 1, it will loop every
$ _* N+ F7 }9 S$ ?5 i // time step. The action is executed at time 0 relative to
) {0 O+ _$ G% _- k$ F // the beginning of the loop.# W) r, L% ^4 G' h; C- g3 f
: u6 D3 x9 u- N* t- \1 A
// This is a simple schedule, with only one action that is
# g+ E% `' ^7 R' U+ J" F1 t" ]' ^ // just repeated every time. See jmousetrap for more
: l# d) n: r! R% I" z5 E // complicated schedules.0 u' A: K3 ]/ p) e J
+ r! D. ]. H) ?( }0 \% m# }
modelSchedule = new ScheduleImpl (getZone (), 1);# V, T+ M6 M9 a! t- X7 C
modelSchedule.at$createAction (0, modelActions);
F* I: u3 j8 S- L % s; x! }' W: L
return this;+ T! C8 P- g# q1 M) O
} |