HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, Y) W# m4 m+ l; a% l" Z
( o. l+ u Q5 K public Object buildActions () {
/ G4 S- r9 P$ U! s, a super.buildActions();+ Z; {+ ^* ~$ s1 D' V6 f4 I# a
2 [! V: Q' b9 F. f, N m. V8 `) r
// Create the list of simulation actions. We put these in
8 @* b% O* |& D u' @0 G5 ] // an action group, because we want these actions to be
# B; e( _& R- D6 w5 A // executed in a specific order, but these steps should
7 S4 X# k" t' N- } // take no (simulated) time. The M(foo) means "The message' M% L# R7 }! A+ _6 E% ?9 L5 d
// called <foo>". You can send a message To a particular# _$ ^/ Z: E8 Q+ f
// object, or ForEach object in a collection.
8 ?! h _! b& x- s8 M6 T9 i( X/ |
$ M$ d5 ^" Q) C9 R9 N' C5 Z // Note we update the heatspace in two phases: first run
) h5 } q( Z/ x8 J // diffusion, then run "updateWorld" to actually enact the. [8 N/ b# f! x& @, ~! h
// changes the heatbugs have made. The ordering here is! o+ U2 ~( g% d9 Q) L! J* z5 N
// significant!
& h9 y; s5 L$ H/ E, p8 j 1 f, \( M- d" k
// Note also, that with the additional
* ] z0 H% a# p* b" z, n // `randomizeHeatbugUpdateOrder' Boolean flag we can
* i( Y9 M+ G' r$ \3 |& G- B4 A7 O // randomize the order in which the bugs actually run* C! b* t) r9 ?! ]* ^; C: M
// their step rule. This has the effect of removing any0 m% O7 [7 z4 N% j2 q8 q% H# b
// systematic bias in the iteration throught the heatbug
: }$ R# i9 k0 B$ \/ c: }, I; p" Y' | // list from timestep to timestep8 `- \ P" c+ ]; N) \' u7 q7 h
5 ~* `4 @ ]. @6 K
// By default, all `createActionForEach' modelActions have7 ?8 w& w: h0 J, V
// a default order of `Sequential', which means that the6 H8 n0 m$ v3 j3 e& \
// order of iteration through the `heatbugList' will be" T8 Y# E2 F6 d, {8 o# d! C
// identical (assuming the list order is not changed" O5 M3 P" X b+ M8 J- }
// indirectly by some other process).
/ J: Y3 f( X# ^
1 P3 c1 {/ Q$ F/ z, z- ~: c5 z0 x5 D modelActions = new ActionGroupImpl (getZone ());
+ G& C5 U8 `" P% b* Y" c
. Y' J n" @2 x; _+ ~% \) d% t try {
: D' J! l5 M$ K( Q. A \4 \ modelActions.createActionTo$message( M( r7 d3 z7 w2 {& x4 _5 Z
(heat, new Selector (heat.getClass (), "stepRule", false));
+ v5 }' Y7 w/ A3 B } catch (Exception e) {
& T, L; Q6 g+ u3 \2 S System.err.println ("Exception stepRule: " + e.getMessage ());
5 o3 P6 P9 _! o& w3 Y }* _7 O+ J% I; m" _: r7 |
" K* n; Q5 X$ \- @3 b try {
# L2 U3 @( h+ Z% G6 Z" z# m Heatbug proto = (Heatbug) heatbugList.get (0);4 X! Y W; T. h* P! t* m
Selector sel =
0 h9 ]8 F9 d) v k' ` new Selector (proto.getClass (), "heatbugStep", false);9 S O! E7 v0 K) u% F
actionForEach =5 a7 i3 h: X' Q1 M3 X- S% ^
modelActions.createFActionForEachHomogeneous$call1 B* t2 @" U# |4 }9 F
(heatbugList,
% B$ ~$ J; p& `, @% r new FCallImpl (this, proto, sel,
( ]4 P6 d2 X4 V new FArgumentsImpl (this, sel)));" j* M3 E5 Z" G ~
} catch (Exception e) {: N! u6 r: r5 `+ u
e.printStackTrace (System.err);4 l9 z7 B, b6 r% K) }' r
}! s$ h$ K' y; W# [! x. @
( q9 a8 ~, `7 M4 W1 x- s: Z
syncUpdateOrder ();- u! q( c3 `- p2 K
- z3 s& H5 q0 [* m; @- |7 \+ y4 Z try {
' q, m1 K4 m4 r$ L" j modelActions.createActionTo$message
' l3 S! Q ^( o# y (heat, new Selector (heat.getClass (), "updateLattice", false));
4 f. |5 B! |1 F* k; B& p$ D; E: d) H } catch (Exception e) {
' l+ g1 E/ v2 s6 j System.err.println("Exception updateLattice: " + e.getMessage ());
3 H! ?0 T9 u8 P/ o4 x }7 G3 f* t0 d; b' t
3 j$ R) o' ]7 @5 X3 z // Then we create a schedule that executes the
- B5 R' y5 I# H' q) n$ M1 j0 f) M // modelActions. modelActions is an ActionGroup, by itself it
' _2 u3 g/ [; v9 l // has no notion of time. In order to have it executed in
+ t! C) J+ r/ \+ S6 l( w- M. M // time, we create a Schedule that says to use the, s1 t& g: x3 B# Z
// modelActions ActionGroup at particular times. This! h( \$ J W' F- W- M! ~
// schedule has a repeat interval of 1, it will loop every
% L* o2 s9 ^5 D, Q! w: U2 r( A1 D // time step. The action is executed at time 0 relative to$ q% R! W: O8 d7 ~/ i1 Q0 p
// the beginning of the loop.( N9 [9 V/ H3 C* t$ J
, Q' d/ _3 D& a // This is a simple schedule, with only one action that is
. q) H3 c0 K* d6 }/ n: e // just repeated every time. See jmousetrap for more- q2 n9 l% I, S7 j) u7 M$ `
// complicated schedules.; I. m1 b @5 \) h9 F
/ a3 ]# _' G2 G8 Q$ _ @3 a modelSchedule = new ScheduleImpl (getZone (), 1);
2 u$ y7 D- B0 \! N; y) ` modelSchedule.at$createAction (0, modelActions);
% x+ }; m4 c$ K o5 C. e0 p) f 1 D6 E5 e6 H- o$ b+ O3 C. ?+ K
return this;
+ V' r# P) e! T: o% [ } |