HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: e" J! y' ~( A# Q- r/ H5 Q
6 [/ M1 h2 ^% d; f, S% f7 x G public Object buildActions () {' F$ t; I4 ~2 {3 j# v7 M
super.buildActions();4 `/ J) w1 P ]* n3 C* t) e
; _! s! k2 q9 M) ?4 f+ B // Create the list of simulation actions. We put these in8 G; k& J* t: r" d. s2 u
// an action group, because we want these actions to be
i) L7 L: ^# h) C // executed in a specific order, but these steps should
( f Z( G4 q1 G2 X // take no (simulated) time. The M(foo) means "The message3 m$ [" q5 O2 M: `8 m3 a2 x
// called <foo>". You can send a message To a particular
2 [7 M+ Q7 X" T+ o# m: N# g6 u* Q // object, or ForEach object in a collection.
5 i- @) A* }8 y& _9 T6 {) [5 X
% ~( c: b7 K+ J, f5 s // Note we update the heatspace in two phases: first run7 p- B0 @* y1 T, e9 C1 ~
// diffusion, then run "updateWorld" to actually enact the
* ^( b0 l) U1 t/ V( Y# f. ]& C // changes the heatbugs have made. The ordering here is
0 e4 v; h( q. h // significant!
. r' u* R- B. s6 H2 K1 }1 q: A
1 p( F p9 r9 c/ i' @! v // Note also, that with the additional" ^* l- D& I! q7 h
// `randomizeHeatbugUpdateOrder' Boolean flag we can' Z7 w3 C! u% @0 {, a6 y) G
// randomize the order in which the bugs actually run- a6 }8 F1 c5 G
// their step rule. This has the effect of removing any$ s7 |" {" D! P1 U0 D) r; U
// systematic bias in the iteration throught the heatbug
: T5 j6 C9 `9 z6 h! N2 ?& A, k // list from timestep to timestep
' z( }; _$ ^, h1 d& |1 N
* ~& T. P) ?5 O: O1 }0 c // By default, all `createActionForEach' modelActions have8 Y0 ^- \1 N* \3 T7 L% \
// a default order of `Sequential', which means that the
& j4 R- ?* z' c2 o" ?3 p // order of iteration through the `heatbugList' will be/ |/ Q# j7 B+ i. ~- d8 J4 a
// identical (assuming the list order is not changed
6 S. U5 G9 o1 b+ O+ l; C' o* y // indirectly by some other process).& k' Q& z2 e# L. G+ Z
+ U" Q( \9 x7 ~& n% I modelActions = new ActionGroupImpl (getZone ());; k9 Q8 M+ W7 L! ]) p
2 b i0 S6 {8 @
try {! c2 X8 x$ ?" R" u8 X
modelActions.createActionTo$message
; _3 H) W3 [- ? (heat, new Selector (heat.getClass (), "stepRule", false));& a) o! R1 q# v! @
} catch (Exception e) {. L: _' v( D/ h
System.err.println ("Exception stepRule: " + e.getMessage ());
7 B ]! G# e; J7 N$ O {+ i4 ~ Z }
" E2 N# j8 _; M% z
# a5 U9 \9 u" o* m6 X- Z# v3 k) U try {
# l/ ?) P5 M% S* X Heatbug proto = (Heatbug) heatbugList.get (0);$ ^( {, r n, \9 G: O. [
Selector sel =
9 T: J0 {5 e/ W2 V- V5 C& R8 o new Selector (proto.getClass (), "heatbugStep", false);: n5 a1 p2 x. R
actionForEach =
$ l: y( k0 T, [3 ` F' t3 Z7 o3 U modelActions.createFActionForEachHomogeneous$call
% f* Q' B1 p$ K; N- w (heatbugList,- R }4 t/ I4 I( `$ ]/ D; q# r
new FCallImpl (this, proto, sel,- ?% o7 n/ x q4 m+ j; ]
new FArgumentsImpl (this, sel))); {5 H$ a6 l3 K$ l
} catch (Exception e) {
' S8 `! w: A9 N8 [9 t/ Y e.printStackTrace (System.err);, }$ w' U; U$ D8 E' e) E* d/ O; F
}
. s S* V# x7 b! U) b' ~# o
[& M) T! m4 l6 C& X syncUpdateOrder ();
8 j* q$ T* U, t& q8 Q4 q9 v) t/ g
try {
8 {6 [) E' i$ T" B9 Y* x modelActions.createActionTo$message
6 |2 E9 w* r9 d9 a/ E# P5 N; o (heat, new Selector (heat.getClass (), "updateLattice", false));3 F/ j- u+ l! B
} catch (Exception e) {1 d( w6 Y, X% j& _- b
System.err.println("Exception updateLattice: " + e.getMessage ());# G& A. D3 U+ x' I9 ~" o' O
}/ T* `" m+ ?9 [/ Q6 A; M2 M: w
. ] B- G. \# ` // Then we create a schedule that executes the' [3 C6 l5 _& k4 h( a' Q% [
// modelActions. modelActions is an ActionGroup, by itself it
3 B" @" U x0 r& ~, o* J1 _ d // has no notion of time. In order to have it executed in
- S5 _4 |% z5 K/ f // time, we create a Schedule that says to use the
- G# t7 X3 M1 L' ^. k4 N8 S- y0 R7 c4 \ // modelActions ActionGroup at particular times. This
4 F- I- t" S. {& B" D4 H) c) B6 L // schedule has a repeat interval of 1, it will loop every
: J* W* i" S- m5 p) p // time step. The action is executed at time 0 relative to! j; ?/ C! r! q* f
// the beginning of the loop.% l# U) {* _+ ^$ J; a- A7 L: A
. `' B: ]2 j. y( `+ r6 {5 _
// This is a simple schedule, with only one action that is
4 E2 Z8 s8 u. V3 c3 s2 ]- s+ V // just repeated every time. See jmousetrap for more' H% b; y5 o' k9 n# }
// complicated schedules.
$ J! Q1 P4 j- |3 }7 \ }& u& t 5 J8 L/ Q# J( u$ E3 O& \
modelSchedule = new ScheduleImpl (getZone (), 1);
/ E% e( |8 @* V4 n7 Q6 i; z& h' C& H modelSchedule.at$createAction (0, modelActions);, L9 N Q8 S i# Y
6 u5 r. V4 r. J, ]. |- W return this;
/ O- S+ i- B7 K$ l' V } |