HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, l1 |9 e. I2 M0 t) Y
: g8 A: y$ r; j' B! u+ k/ {5 s public Object buildActions () {, _$ k$ w0 M- T1 F, O
super.buildActions();3 f. z# E- K8 B6 M, [9 K
- Y- T/ [ Z1 Y3 l- ]1 u9 }
// Create the list of simulation actions. We put these in
2 z, V6 U8 B% W ~ // an action group, because we want these actions to be/ S [& i7 c7 }! U' {& U* j
// executed in a specific order, but these steps should
/ [/ g" G9 X6 E0 ^! ^9 q // take no (simulated) time. The M(foo) means "The message
9 D* O9 l- p8 z+ v; J // called <foo>". You can send a message To a particular
" B1 s, e/ E4 t( r, M4 N9 n // object, or ForEach object in a collection.
! D- D" d6 t* K
3 Z2 q- p) m" s- J7 S5 \ // Note we update the heatspace in two phases: first run, o+ N$ F* C" O. Q: y% k' Y
// diffusion, then run "updateWorld" to actually enact the
: _: t" J% c* f' O4 H8 D* W* a# Z // changes the heatbugs have made. The ordering here is
* s) {) x! D% u, G; K0 U5 B // significant!
) A4 i0 j, t( A x6 X
: ~! N1 v- i! U- O // Note also, that with the additional
+ E5 ~% @, K; S. h // `randomizeHeatbugUpdateOrder' Boolean flag we can# c; [. s3 r1 j6 L; h- E
// randomize the order in which the bugs actually run
4 D# z3 I2 y m // their step rule. This has the effect of removing any
; F5 N+ h O; [' k# F$ F // systematic bias in the iteration throught the heatbug
1 S1 U8 T: @% G* @0 F7 c3 h7 C // list from timestep to timestep
' U" m; {# q6 z8 O7 g. z. K
& T* L: H5 T$ r4 W4 ~3 l1 u; l+ W // By default, all `createActionForEach' modelActions have7 {- }: k' E) M+ O- {+ C4 Y3 {
// a default order of `Sequential', which means that the0 A; ]$ _3 k/ I |% ~ M) z0 g
// order of iteration through the `heatbugList' will be; W1 _$ d: K: s, h
// identical (assuming the list order is not changed
4 `) ]; P# j7 W // indirectly by some other process).
4 s' m4 I1 l0 D+ R6 { : X1 H" ~' V8 M" s, [, s& ?0 r
modelActions = new ActionGroupImpl (getZone ());
6 p1 e- i+ k' g3 y) W1 U' M
7 {; U1 [2 R/ Q! B try { @" m0 C! ]( q8 U* f) R' Y
modelActions.createActionTo$message
" w+ {* D6 v8 d3 y! n/ P' j. ] (heat, new Selector (heat.getClass (), "stepRule", false));
0 A, k$ |( H. K7 R( [1 _: J# A' U } catch (Exception e) {
- [5 o' V. @7 I W, c/ K System.err.println ("Exception stepRule: " + e.getMessage ());
# E1 C$ C, L' h4 |9 Y }! C# n: U4 r9 S& U3 @/ k* m
' _: Y2 x6 \% {$ k try {
% {3 e) m+ p- |8 ?' f5 E Heatbug proto = (Heatbug) heatbugList.get (0);
' S. S4 h1 E$ t: A4 A Selector sel = 1 _+ m( h% A* W! V
new Selector (proto.getClass (), "heatbugStep", false);( {& i! d6 a$ b* O
actionForEach =# X; G: D2 `: X9 V( a. h7 S. b# F
modelActions.createFActionForEachHomogeneous$call' s8 h1 u0 w* q0 s
(heatbugList,+ @" I, ]' I& ?# P3 D: m( a
new FCallImpl (this, proto, sel,
3 v( u% q; A% T8 H new FArgumentsImpl (this, sel)));
# k% ~$ ^# Z, {; ~6 o } catch (Exception e) {
) I6 j) ]) U& Q: W e.printStackTrace (System.err);
' r, M" i. `( d( h+ X3 p }2 \. \- s) j. a' }. v: p+ m
: x# z- ]# ~: |6 s; L+ E, T4 X
syncUpdateOrder ();
! J8 c3 d* _; c/ e/ ?- e
, m, K$ `5 H7 [ try {) Q" H" T5 E/ `2 @2 e
modelActions.createActionTo$message
2 z- z) |: z' V# o (heat, new Selector (heat.getClass (), "updateLattice", false));, L. S0 y$ O- G- Y7 G2 q
} catch (Exception e) {, k7 [; x' d9 o
System.err.println("Exception updateLattice: " + e.getMessage ());
, e; K# ?7 [) s7 V8 ^- W }
) ]' d( S! i' ^+ ]
8 x' |( y- X+ g% y7 I$ P( p // Then we create a schedule that executes the [ i; G8 c; R9 }$ L
// modelActions. modelActions is an ActionGroup, by itself it+ N) l+ X! q' ^+ O# \" q
// has no notion of time. In order to have it executed in* Z) P/ T/ T) ]/ X% ]6 _0 ?3 R
// time, we create a Schedule that says to use the
/ d4 J. g# f" q$ r& S4 q! v- A // modelActions ActionGroup at particular times. This) d, o v1 V' F) E1 h1 r( A
// schedule has a repeat interval of 1, it will loop every
9 a7 R4 M" u; s // time step. The action is executed at time 0 relative to. B1 P% X7 n4 C9 x1 e
// the beginning of the loop.
6 u8 o! s3 ?+ i
' k6 K7 M% K- Y0 F! f# R9 q1 Z // This is a simple schedule, with only one action that is
8 d/ h) G2 s J# I // just repeated every time. See jmousetrap for more
# U0 M; W, e* A# L8 D. r // complicated schedules.1 K+ [9 L* u' H3 I
5 ]5 ^6 T8 J. O( G+ f( f) \& m
modelSchedule = new ScheduleImpl (getZone (), 1);, N7 B6 [4 q! U3 p8 ?5 _
modelSchedule.at$createAction (0, modelActions);& A" ]/ ~3 ^, A; \# y
1 s6 z- n/ `9 T0 K( | return this;
# m C/ y% q1 ^+ a } |