HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# ~: t& R; j e9 l
0 _2 w3 h0 q3 v+ Z7 I! J public Object buildActions () {; q$ |% P" Y$ f4 m3 T
super.buildActions();
5 p8 Y2 f( n, I8 r
5 [6 c- K, L8 H: d3 y5 G; {( J // Create the list of simulation actions. We put these in
6 w5 i, l- D1 V8 k; ^8 v // an action group, because we want these actions to be: L* e' d8 p8 S; n
// executed in a specific order, but these steps should# H1 y7 y; n# F6 Y. j$ A/ H
// take no (simulated) time. The M(foo) means "The message
( |1 `) k! Z3 U9 } // called <foo>". You can send a message To a particular
; r9 I1 _ h2 h3 l0 P2 y // object, or ForEach object in a collection.
! h8 w4 D. r) g
7 }5 n8 X2 J, z8 R3 i/ F; G // Note we update the heatspace in two phases: first run
0 U3 q/ Y6 x/ I+ t4 Z // diffusion, then run "updateWorld" to actually enact the* P$ x8 B* S- l9 K# h3 e
// changes the heatbugs have made. The ordering here is0 X( x/ C; [; V7 U% Q9 N* U
// significant!
- \# b. k1 Z9 f ]; u: k( q; ` + W& d) q" K7 S& U. ` y! q4 ]
// Note also, that with the additional
- O' o# u9 P" M% Q% Z // `randomizeHeatbugUpdateOrder' Boolean flag we can
7 ~0 y9 A/ e O2 Z3 D2 ?0 Q, z // randomize the order in which the bugs actually run
2 g' q0 G' I' h3 Q4 d/ b // their step rule. This has the effect of removing any d9 E, K T% }" o$ e4 a, Y/ b: f
// systematic bias in the iteration throught the heatbug
; h, e) J* A3 \% Q. Q0 C9 Q6 G // list from timestep to timestep
6 B0 ?' s" t" y
+ f7 N0 b$ |" ]+ @8 x" ~5 g // By default, all `createActionForEach' modelActions have! r3 Q& p- S+ N, C
// a default order of `Sequential', which means that the5 ]& B1 |0 u0 ~- S z
// order of iteration through the `heatbugList' will be
9 H* @; I% V( b w! \7 G // identical (assuming the list order is not changed: U2 l9 V! A T8 w
// indirectly by some other process).
0 C! d2 w" V& l5 x5 F
x& ]# c1 l* z- u# F8 D modelActions = new ActionGroupImpl (getZone ());, J) y- ~/ U; w4 J" ]6 W
! L/ u% O0 F7 i. X try {4 E- b$ B( l2 _3 F( l# N
modelActions.createActionTo$message
- i9 v0 z5 p2 K3 W, V& m (heat, new Selector (heat.getClass (), "stepRule", false));
+ c6 d7 i+ X- L: L& E( }! U } catch (Exception e) {2 W0 H- X( ]6 a" v9 a, D: |: A
System.err.println ("Exception stepRule: " + e.getMessage ());6 i0 l( D7 W+ r' c+ X- W& M. P
}
# Q; O4 R/ u% D+ G( {
8 c/ E0 |# @" {$ J+ ]) x try { k( ~ k7 i9 J9 P' `) |, |
Heatbug proto = (Heatbug) heatbugList.get (0);3 t' i( y: m6 y" D* z
Selector sel =
* Y, @: y' h. ]7 {& i" j" D7 r new Selector (proto.getClass (), "heatbugStep", false);
/ }: A7 l0 s7 ]) ]6 w8 ^ actionForEach =
( }$ y$ Q8 \6 H$ T( z+ W modelActions.createFActionForEachHomogeneous$call
+ T2 s) i3 a# S2 N. B (heatbugList,: g; ]3 S' O6 l
new FCallImpl (this, proto, sel," A" R3 G6 \) Q B) [1 l0 u
new FArgumentsImpl (this, sel)));# E4 s5 D% ?0 s7 h
} catch (Exception e) {
- X; q5 M2 {3 f" g, o, s5 ^7 b+ h3 N e.printStackTrace (System.err);
2 ?& x) p. K/ r" c% J0 s }' @+ E: G8 g" ~& u" `5 @3 `: g; H
, C0 i0 u' S; J1 B2 i( { syncUpdateOrder ();, H) D! |* C% \0 o K
+ O9 ]' F& t& y& f1 A
try {
1 D* x& B" {& }- l0 P" R; v modelActions.createActionTo$message
4 z- p' ]) _) A% V e! B% _ (heat, new Selector (heat.getClass (), "updateLattice", false));
* ?( t. X' A0 y: ^5 w, G0 m } catch (Exception e) {
' A5 O) ?* M+ z# z: N1 r System.err.println("Exception updateLattice: " + e.getMessage ());
. n0 s; G0 w, H }
% @6 D0 I4 n& n& {/ G1 n) ^4 B * R9 J! l2 C1 W( N7 G9 o6 v! Z' t
// Then we create a schedule that executes the
$ c# P2 d! l K7 C) T% p @' ] // modelActions. modelActions is an ActionGroup, by itself it
$ F) r. ]; D# r- ] // has no notion of time. In order to have it executed in
) v$ {2 ^; }0 y% E, z // time, we create a Schedule that says to use the d) Z, l4 U- M8 b$ U
// modelActions ActionGroup at particular times. This7 \% y8 w _7 E! b8 v
// schedule has a repeat interval of 1, it will loop every7 |: f- C1 h1 D @ ?1 I
// time step. The action is executed at time 0 relative to
' v0 ^! S( D3 B3 A. Y- h: e // the beginning of the loop.
- n. O& k2 [2 V
) r! c8 t* H/ {7 \ // This is a simple schedule, with only one action that is
8 K4 C0 m, B! a8 n // just repeated every time. See jmousetrap for more
$ J/ y7 g6 N s: T& z+ h // complicated schedules.6 ]6 N& p* s' ^9 k: r5 j) w$ M
F7 e' x0 c0 S( C- |: R. q% K
modelSchedule = new ScheduleImpl (getZone (), 1); C# e5 L; Z4 Y8 z. f8 |1 j! J' i
modelSchedule.at$createAction (0, modelActions);1 K- [2 C B, \: x
* z( [8 o0 Z* V/ t return this;, I4 k. K% r2 w5 m% R
} |