HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" x& A% {* ^7 T- D
. I( X6 h. B# A- @ public Object buildActions () {
. {8 f- K& u3 z% a/ Y0 ]+ g N super.buildActions();2 `% M2 i/ }& f; r
) B- K$ `$ |" R9 ?5 }$ K+ w
// Create the list of simulation actions. We put these in8 [. @ l+ `" U3 N
// an action group, because we want these actions to be a- d; ?6 {1 u6 |0 U# {1 e
// executed in a specific order, but these steps should9 _5 G. W' n. u0 w e, p
// take no (simulated) time. The M(foo) means "The message1 M9 q! D- b' `5 V1 m6 I5 u
// called <foo>". You can send a message To a particular+ ^' G* _/ u- B% C3 z
// object, or ForEach object in a collection.
& a8 l F# u/ O T' Z/ T+ c " a: E' M/ G2 |+ j+ T* O
// Note we update the heatspace in two phases: first run
3 f6 x8 {4 K3 z+ I& e // diffusion, then run "updateWorld" to actually enact the; j2 {2 t7 R+ y6 _9 ]. I
// changes the heatbugs have made. The ordering here is4 y, g E8 J" x# K/ W3 U
// significant!
* H) ~4 x4 d+ H3 Z! Z! `5 a* ?
% ~0 T4 ~7 y# A8 Z# h9 T // Note also, that with the additional
/ ~9 B+ B4 M9 Q // `randomizeHeatbugUpdateOrder' Boolean flag we can. G% M( \2 E) ]! ?4 \6 g
// randomize the order in which the bugs actually run
; g& H8 r; y. e$ D0 ]3 U% K // their step rule. This has the effect of removing any
6 g k" d- p8 W0 s# \ // systematic bias in the iteration throught the heatbug
5 `0 [+ F* d/ E2 {2 f9 ~ // list from timestep to timestep, ]% o! j* j- z* [
. [- m1 N1 y7 p3 g6 ` // By default, all `createActionForEach' modelActions have
; }0 m) A ~. X+ w9 }2 m7 A // a default order of `Sequential', which means that the
5 s* J1 Y: \, j // order of iteration through the `heatbugList' will be3 M" x7 F* G: D# v! C
// identical (assuming the list order is not changed1 {4 ~% S: R, z' ^! C$ `7 T( ]
// indirectly by some other process).; f/ z9 X: [/ i
3 L+ `( M- ~% R modelActions = new ActionGroupImpl (getZone ()); o; N0 v8 }$ }- Q) T7 m
7 U- O* j1 s. U4 z' J* `& c try {
6 k/ q2 j' D7 y* { modelActions.createActionTo$message1 a, G1 {( m, i& l
(heat, new Selector (heat.getClass (), "stepRule", false));! d7 H# E+ k5 X- K/ i9 y
} catch (Exception e) {+ T" l' w( b( ^# @
System.err.println ("Exception stepRule: " + e.getMessage ());
4 h5 Y& F, a1 c }# V0 D& O. X) U( J$ t+ |
" p* m+ a8 k. l6 v try {
& b, q' x' U8 e M Heatbug proto = (Heatbug) heatbugList.get (0);
8 C6 _6 k5 K0 M- L* ?& E! T Selector sel =
$ |, } {; Y1 ?% j new Selector (proto.getClass (), "heatbugStep", false);
2 z b) E2 Z0 ^# K actionForEach =
# X8 d3 R) J- k: k" ?% J modelActions.createFActionForEachHomogeneous$call
7 c% l2 T- L- R( _* G& P7 F; C8 J (heatbugList,- M5 @- x* }8 f2 B% c- o- _8 g
new FCallImpl (this, proto, sel,
; A9 g; [* }$ h% y$ C6 Y; [. C new FArgumentsImpl (this, sel)));
0 y$ e# I: k6 z7 ?+ F/ s, E } catch (Exception e) {
6 p7 N2 v4 | v! l @* h2 C e.printStackTrace (System.err);
0 M9 K: y$ }' H( i& x. m }
( m% o3 p( K. B+ H" @0 l) I % H& b4 J0 U L+ ?
syncUpdateOrder ();$ d- b9 ?, R) {" J! X" r) E! W
' E; f9 d+ t$ j7 k' B try {
- L$ X$ ]6 \" h modelActions.createActionTo$message
( u, G( Y/ q, L8 ` (heat, new Selector (heat.getClass (), "updateLattice", false));
" h; C! c( r3 X2 Q' z } catch (Exception e) {
. _9 |9 N0 `% f9 E( B* o+ [8 i System.err.println("Exception updateLattice: " + e.getMessage ());
. s) Q+ ]' ]$ ]9 Y( n0 W! [0 ^ }
+ U& f$ p0 Z( i9 y" H : b3 J, W7 [1 A% \/ W) ?
// Then we create a schedule that executes the1 v! @' @6 q4 b3 o
// modelActions. modelActions is an ActionGroup, by itself it; F; C8 F9 E- {& s$ r
// has no notion of time. In order to have it executed in
* g3 a/ t# E& _' K" o // time, we create a Schedule that says to use the
k. w6 y9 T* }5 i; V& j: M // modelActions ActionGroup at particular times. This1 a% j1 A, y! O8 Z9 V" Q
// schedule has a repeat interval of 1, it will loop every
. n6 }1 I8 s& [' A5 |# d" T# m // time step. The action is executed at time 0 relative to6 Z0 |4 K/ Q8 `/ n. C
// the beginning of the loop.
* k' {6 s3 B2 v, c2 a5 n) Q, d; V+ K" _- S
// This is a simple schedule, with only one action that is
! v5 c; N O& l // just repeated every time. See jmousetrap for more+ s6 Q# {- x$ H- S
// complicated schedules.2 C% o" R8 i7 F5 d9 p3 v' m. f7 Z
) Z1 b8 M" u' N9 p H! w modelSchedule = new ScheduleImpl (getZone (), 1);; _% B- |4 Y- N$ Q
modelSchedule.at$createAction (0, modelActions);: E5 j* M% J) V2 c
6 L6 p$ l, r5 D% J; a; s
return this;
- Z% ~9 q A$ t } |