HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 z* B7 B& x, |8 U7 ?' V8 O6 T: G# i, w, o" p+ U* ]2 Q! ^
public Object buildActions () {
: c8 H5 W1 k, }+ }+ b4 k; f$ Y/ } super.buildActions();
S$ j- I E0 v 2 V) E9 j4 J$ U6 |
// Create the list of simulation actions. We put these in1 g+ {6 W0 A7 r. p3 B% W
// an action group, because we want these actions to be+ f! `) T1 T% w
// executed in a specific order, but these steps should
" y, v% ~( k* h5 T. F# r, j" v // take no (simulated) time. The M(foo) means "The message
! Q* {( T( `7 e // called <foo>". You can send a message To a particular
' {6 e# F* y7 e/ T7 a" P // object, or ForEach object in a collection.
/ G- I7 E% B% Z* I2 g4 f- l) S 2 @% b, [9 b2 X6 F7 u4 c: G
// Note we update the heatspace in two phases: first run7 t, n$ u$ O; d. |# R5 }; l
// diffusion, then run "updateWorld" to actually enact the( b) a3 N, L7 N3 l3 n
// changes the heatbugs have made. The ordering here is
! w) R$ y, E$ g/ A // significant!
' [; @. x4 H2 \2 @- {1 b
, n! k) K2 H6 |$ U, \* O- ]0 H // Note also, that with the additional% B0 X4 [. K3 d' D) M( L
// `randomizeHeatbugUpdateOrder' Boolean flag we can8 S/ R. ]; l+ l: l7 _
// randomize the order in which the bugs actually run; j. N" x$ x2 ]5 j% r
// their step rule. This has the effect of removing any
9 L- E: W8 o! Z3 u; K/ d. y // systematic bias in the iteration throught the heatbug
+ c( o2 O# H! @( N9 J // list from timestep to timestep
" v8 T2 Q8 L6 ~0 b! d4 F
7 o' `% o, v2 m) H% q // By default, all `createActionForEach' modelActions have% D% @- e9 R# ]
// a default order of `Sequential', which means that the
7 Y* n" |" r! T8 B2 N // order of iteration through the `heatbugList' will be* o% a( T+ i4 p. ?5 a
// identical (assuming the list order is not changed
, V; G0 X; G6 a: X7 y% ? // indirectly by some other process).
5 g4 I. m$ v8 N- R3 S & g8 n9 M! r% j! j5 p Z+ h
modelActions = new ActionGroupImpl (getZone ());/ s% `4 k1 @. K n# {( k
/ s( v4 f5 O5 N7 q2 r% P9 y try {8 B) h6 w7 u6 z! I( P% h0 ?" C
modelActions.createActionTo$message( |' C% o: _) {$ `6 _
(heat, new Selector (heat.getClass (), "stepRule", false));
% s5 I+ r+ S, s1 G } catch (Exception e) {
& C9 q9 v3 X7 D7 J: }4 x+ j* ^ System.err.println ("Exception stepRule: " + e.getMessage ());
! a" \% S$ g! b+ V } i1 m5 s+ E% _5 ?: C' t, _
0 F# G: G; e' H9 O8 Z Q try {6 i2 Y) K2 |) Z* r2 F T2 a
Heatbug proto = (Heatbug) heatbugList.get (0);
0 Q. m$ q0 i; I; o" u8 ~6 j7 _. R Selector sel = % ?% o- u! u4 v5 ]' K
new Selector (proto.getClass (), "heatbugStep", false);! e. k9 p) Y. g- {
actionForEach =
1 E+ W- U. y9 E$ `: ^( \* Y modelActions.createFActionForEachHomogeneous$call% z0 V* t B( |, `4 I7 R
(heatbugList,
, _, Q& w" k: P new FCallImpl (this, proto, sel,
- J2 V, a& y* @2 ] new FArgumentsImpl (this, sel)));5 R. B4 _' O" u) Q- {8 T0 P5 B
} catch (Exception e) {
( ~0 N4 j0 L( Q/ W0 o e.printStackTrace (System.err);
% G/ ]* v- M1 P7 `* ], N! k; y }
; G# i6 Y1 Z2 q7 C/ Y 0 u- a6 E4 f+ @- I0 b
syncUpdateOrder ();
! ]& M4 @( _% Y& g
4 U) `& ^+ e! K* t ~& Y4 F+ U try {
/ p7 G3 k5 U q# Y% s' l4 W modelActions.createActionTo$message 8 J& f( ~. l1 W# [: l8 _: V
(heat, new Selector (heat.getClass (), "updateLattice", false));; b7 l, y" u' {
} catch (Exception e) {
9 Y& T; X9 G/ L9 d' F System.err.println("Exception updateLattice: " + e.getMessage ());
6 R8 q3 `. X" s: Y }
% @5 H5 ~. R$ T
: s0 }0 Q. P$ @9 k s! W0 ^ // Then we create a schedule that executes the' k! N; b1 z( D( e, ^% D9 x
// modelActions. modelActions is an ActionGroup, by itself it* J `9 Y0 p9 P% K$ h3 n, D
// has no notion of time. In order to have it executed in+ |. r% _& Q# `
// time, we create a Schedule that says to use the7 i8 z. H& n0 D1 L
// modelActions ActionGroup at particular times. This
/ g% `* X( r# r! Y // schedule has a repeat interval of 1, it will loop every
0 }) X# d" j1 v- R // time step. The action is executed at time 0 relative to
6 t1 Y+ ]9 A: W# R4 ^( R( w; s // the beginning of the loop.9 k4 d6 r# a0 A* Q6 ]5 [, g
7 p. ^) H7 S6 ?: ~! C
// This is a simple schedule, with only one action that is, P- i* r/ \5 ?) w
// just repeated every time. See jmousetrap for more. e( J, A7 R6 Q- p/ v0 V
// complicated schedules.
4 H6 n+ o* k( P6 j) d* L $ Y, M3 \" G- G! B6 x7 x
modelSchedule = new ScheduleImpl (getZone (), 1);
& s4 d- Q' C) W/ o modelSchedule.at$createAction (0, modelActions);
, M2 D6 q; N ?) T , v. S6 i a" Z+ |) C0 Y6 L! U! v
return this;
h! z& D# |! F+ Y% V& B% H! n } |