HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 J: R1 ~) D5 _1 Q- ^: @) v
) C" n4 }* w& y$ b
public Object buildActions () {- a( C4 x% n/ _. W9 }3 n$ f
super.buildActions();# q1 u, O+ @3 F/ I+ x" ]
; I8 h9 o) c- k4 R, L // Create the list of simulation actions. We put these in
& Z4 ~* [. h6 s- u# } // an action group, because we want these actions to be4 g$ i& o! K: f, b( u, G4 `4 r
// executed in a specific order, but these steps should
$ f% \& M: z6 \0 h# E // take no (simulated) time. The M(foo) means "The message/ O6 G; o. L# P
// called <foo>". You can send a message To a particular' O$ s6 ]( y: S$ A
// object, or ForEach object in a collection.
8 p4 I8 M4 x n" s- A
4 S8 `+ C9 }/ l // Note we update the heatspace in two phases: first run
1 I. g; j9 p9 }5 I: @, O' a- c4 M7 C // diffusion, then run "updateWorld" to actually enact the
# o) y6 g) t, x# G# H" Y- G6 B // changes the heatbugs have made. The ordering here is; ]( ?/ b- F; t
// significant!
/ |! T7 n* x) t7 U 9 S9 I: ] s" P, E, G: n* V9 B' h
// Note also, that with the additional
8 b% |) Y) L7 o! ], y# y // `randomizeHeatbugUpdateOrder' Boolean flag we can
; s) L8 x! o7 p+ O9 L/ ^" ~8 b // randomize the order in which the bugs actually run
5 X/ K/ V7 A6 t- `! x // their step rule. This has the effect of removing any. m6 W+ K+ ^& F
// systematic bias in the iteration throught the heatbug5 x3 ~- M& y$ l
// list from timestep to timestep# B5 z$ n# x" u/ U7 |/ }
7 O6 a& O% c' |. B( Y9 s4 B' ?$ f // By default, all `createActionForEach' modelActions have
: f; o- {) B8 j! h& |2 z- U5 s+ O+ M // a default order of `Sequential', which means that the# V. p4 a# V5 }2 f! d" }
// order of iteration through the `heatbugList' will be! n$ W" r7 F; n% k. ^
// identical (assuming the list order is not changed
* d" x9 U, [' @ // indirectly by some other process).4 r' `4 x& a' E# k8 y
& x+ H9 u; ~0 \" @$ ? modelActions = new ActionGroupImpl (getZone ());5 ~1 F- a4 G: j, o
: h8 Q# N' A+ d( \: r0 x
try {( _; Q* B9 p% W* t: O# Y& C
modelActions.createActionTo$message' [$ w$ X9 q1 I; x, h
(heat, new Selector (heat.getClass (), "stepRule", false));
; Y- E, L/ N0 G w) _ } catch (Exception e) {
9 ?4 n4 J7 j0 B! c System.err.println ("Exception stepRule: " + e.getMessage ());
. E/ @6 e1 H. r: q: d) ~' G }
# P. p. y( b# |5 P/ G; D9 Y3 Q4 k. M# E
try {
7 N3 [ P; c& E; L+ J d- S Heatbug proto = (Heatbug) heatbugList.get (0);
2 b+ z! n: v( [ Selector sel =
) A/ C+ i# i8 W: F6 e new Selector (proto.getClass (), "heatbugStep", false);. |6 p7 q% @# Q S1 i
actionForEach =
4 {) v" m% o6 d9 O: [+ I modelActions.createFActionForEachHomogeneous$call7 W# L* H8 B1 K. D8 w$ Q$ n; u
(heatbugList,
8 b% }5 U. X" O new FCallImpl (this, proto, sel,
) \3 B) H% H/ z6 e- g new FArgumentsImpl (this, sel)));# h8 r9 b6 j, F# I
} catch (Exception e) {
9 C6 i/ {9 z5 k e.printStackTrace (System.err);, L7 `: a& N8 e0 O
}
/ G! d$ x w- |1 d( f) g1 M0 f- X M
8 T1 v+ E1 L& v% X syncUpdateOrder ();
4 | g4 d' J1 V
' u$ N3 O( W: [ e, i4 G" } try {
h3 M: j3 H& z' m* I( `! _ modelActions.createActionTo$message - V. v& `/ y" C) _+ Z- x
(heat, new Selector (heat.getClass (), "updateLattice", false));3 Z( c# `* f W- R
} catch (Exception e) {
- ^5 {5 }; _ U# V. o' R t# w System.err.println("Exception updateLattice: " + e.getMessage ());
& \9 ^. a0 l5 @& |) ^, G* _6 p% k }# K2 W) \/ I9 i* k
. W( W, z1 P6 Y# F% r // Then we create a schedule that executes the
# t. R7 k6 B$ L8 m% E3 \7 I) p // modelActions. modelActions is an ActionGroup, by itself it+ G7 ~* E4 v+ }1 {& U
// has no notion of time. In order to have it executed in
: j+ v+ O6 O- {7 n1 g // time, we create a Schedule that says to use the
7 ]3 I1 h5 h6 V8 t // modelActions ActionGroup at particular times. This
1 s5 Z5 ^8 k% K* X2 Q8 ~, o ? // schedule has a repeat interval of 1, it will loop every$ q- q6 a6 ?) a) R
// time step. The action is executed at time 0 relative to
0 W; m% O+ \. f" G // the beginning of the loop.6 N7 L2 u) p- d1 {4 E, w
d) C0 V5 ^" a1 t% b" M$ N // This is a simple schedule, with only one action that is4 ?# O) p$ e, \0 M! k4 n' |+ }' J
// just repeated every time. See jmousetrap for more2 m; D6 @* |( Y& m2 d9 Y
// complicated schedules.' a7 ?5 U8 e0 Q% [1 ]6 `9 H
) g9 k0 b+ f& Q4 \2 o V modelSchedule = new ScheduleImpl (getZone (), 1);
) W5 {- W! t( H4 r4 |4 E$ u modelSchedule.at$createAction (0, modelActions);
6 l# r+ F v' s( ?+ ~ ( j3 `/ O% F" {# A/ U: ]; u# e2 V- c8 W
return this;' Z) }8 |- Z/ t# S7 v' v* c
} |