HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 A$ s1 i w( U7 x4 Z- m( O$ F
0 v5 A- H9 X- \' B% I3 S public Object buildActions () {) {1 g! j/ j7 o' e! H1 W
super.buildActions();
8 s0 ^, `' C& t! E& s. w) n! u6 ~' S: a
3 U' t: H2 w) P: y4 P // Create the list of simulation actions. We put these in
+ ~( G. m9 @; ]0 F J // an action group, because we want these actions to be; Y6 k2 ~0 y# U' k- [: I) I
// executed in a specific order, but these steps should6 e% O( [+ U2 t# ]/ m! A; R
// take no (simulated) time. The M(foo) means "The message
8 C1 ^$ A7 r, g' T1 ~ z6 Z! F // called <foo>". You can send a message To a particular
+ T0 Q- D! j6 R8 J // object, or ForEach object in a collection.
) v1 z, l# H# c+ R3 x" }( I
- Z8 k j4 r+ u5 [6 Y, b- z // Note we update the heatspace in two phases: first run! t/ I2 b" w# X/ D6 k
// diffusion, then run "updateWorld" to actually enact the
5 ^/ l' }( b6 }, N // changes the heatbugs have made. The ordering here is
9 [% ]! Y$ f; w5 S // significant!9 Y8 q3 b# J7 f+ Q0 Z& _# F% n9 f
( f0 Q# t* c' y! w" I9 v R7 S5 Q // Note also, that with the additional
3 u: Q- i. O! c ~5 Q/ G/ n // `randomizeHeatbugUpdateOrder' Boolean flag we can2 z5 h1 _6 E# F$ E, h; g
// randomize the order in which the bugs actually run
+ M0 I" L4 r: b( c+ l. T1 |, D // their step rule. This has the effect of removing any
3 M' @! B P K$ K2 X( m7 E) L8 R1 v // systematic bias in the iteration throught the heatbug6 t# q, @# {# D9 X7 C( k8 Y
// list from timestep to timestep7 u2 _- M& t# a! a; _3 D t
6 a6 j0 [) H, w* {
// By default, all `createActionForEach' modelActions have
$ \ g' T! i3 z; }! P( f& [ // a default order of `Sequential', which means that the
7 ^. h+ y ?) v" c9 N // order of iteration through the `heatbugList' will be3 R6 g2 E$ z3 _9 s7 y
// identical (assuming the list order is not changed
: v7 m' G, w( T$ Z0 u // indirectly by some other process).
4 }% e! u/ A9 H2 [
! G4 T$ j3 e$ P) [5 c modelActions = new ActionGroupImpl (getZone ());5 w- t9 D; h7 g/ A3 S6 t
8 z7 p5 ~& F& U8 v4 k
try {
6 U% l* j" H& M( Q) g4 X modelActions.createActionTo$message
0 I: R. S2 i2 x1 B (heat, new Selector (heat.getClass (), "stepRule", false));
0 o( n6 W, Z- ]+ p } catch (Exception e) {% p0 C* G4 V$ p; ^$ N4 S+ g* ~
System.err.println ("Exception stepRule: " + e.getMessage ());
+ t$ N$ i8 x) s5 t }0 A1 ]/ U7 k; K! ^. r* z. `0 Y
7 \+ x: @1 G( t( T4 k+ J
try {9 B& q: ^9 d6 M. Q+ s* I8 u
Heatbug proto = (Heatbug) heatbugList.get (0);
; f w! Y, p7 H6 {/ g Selector sel =
9 A" y) @% n& M$ ` new Selector (proto.getClass (), "heatbugStep", false);
/ K4 q+ p) D; Y$ B0 _: U0 _ actionForEach =
2 C& N" m5 E! t; G) h; u modelActions.createFActionForEachHomogeneous$call
* S( T3 L- ]! V. X (heatbugList,
; _2 g( C7 X% X* t% }" n: Z new FCallImpl (this, proto, sel,
! G4 c! c: J; w) N new FArgumentsImpl (this, sel)));# A( o7 b+ q' }7 ^2 w. W" Q* u/ q8 {
} catch (Exception e) {
0 `8 u% ?- O. L: ~0 V e.printStackTrace (System.err);
, @" _( z3 ?- M( S0 h- V( @ {3 f* x }
" y6 R& Y# M/ t+ x0 o # n) d. k8 E1 R! O; m& ~
syncUpdateOrder ();
( E3 [; k; W& R" l* C3 Y7 ^! c
5 ? L* w0 R, N9 X. _; E1 M try {: v8 A2 d: M, k0 ?- B0 A
modelActions.createActionTo$message 0 Y& z& ]& ]5 E2 Y3 K
(heat, new Selector (heat.getClass (), "updateLattice", false));
) Z) b2 H- H" \ } catch (Exception e) {
+ f# l, L. ~ [ System.err.println("Exception updateLattice: " + e.getMessage ());
; V+ E8 _; p, R% c$ S) c8 l- O9 {% D" w }
. y& |, i8 x# R* K1 ^! n
; G1 O' S! q3 ]9 S1 H6 f; s // Then we create a schedule that executes the+ X; F' O0 J" X2 ?8 t. N, k" ^/ y
// modelActions. modelActions is an ActionGroup, by itself it& v( K& v4 C- h9 t
// has no notion of time. In order to have it executed in
0 e! J: } ^! G( J& S$ P // time, we create a Schedule that says to use the) z, z. y' y4 D$ I8 P6 J4 R$ h
// modelActions ActionGroup at particular times. This I* ^0 M0 f( ?, O8 g
// schedule has a repeat interval of 1, it will loop every7 Y1 ]6 ]5 x5 }- ], [3 P8 K% c: L
// time step. The action is executed at time 0 relative to1 w7 u, ]4 J9 |( O, P
// the beginning of the loop.
, p+ K4 f. ?5 u* S/ r% X
% A. A6 `5 ]! r# t7 D. t, t // This is a simple schedule, with only one action that is
! L5 T% W; z, N4 N9 G // just repeated every time. See jmousetrap for more! z+ O3 }# g( j: w% @5 D# v! {
// complicated schedules.& B$ u6 x7 ~/ [' v5 D, _
" u) n1 `0 j; ^
modelSchedule = new ScheduleImpl (getZone (), 1);0 b- p& M T( |
modelSchedule.at$createAction (0, modelActions);! e* S& i0 o( j1 _+ `# m1 @. ^( S7 S
+ `5 p6 ]$ w: [1 X& y3 s return this; v7 h$ ?$ @0 D. A
} |