HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 [0 o' @6 T& Q a! Z
' n5 T( G* A5 ?4 ?* s public Object buildActions () {3 t" j7 k/ b8 u5 _& @. K r9 f8 Z
super.buildActions();. V Q/ o1 O; |0 ~, l( ^1 @
p1 F+ l8 |& O' a // Create the list of simulation actions. We put these in. X% y# S# v4 t' C
// an action group, because we want these actions to be1 n7 h: ~+ F" E2 A1 M
// executed in a specific order, but these steps should) u: l( n4 I, P
// take no (simulated) time. The M(foo) means "The message& k. s( d0 \; R1 I( I. Z1 l) V, m
// called <foo>". You can send a message To a particular: i% F5 V: G6 t
// object, or ForEach object in a collection.: q t, D3 L& k. l
# J7 _8 W' O/ T4 g9 Y5 K) I* U8 ]
// Note we update the heatspace in two phases: first run+ [1 E! k, [5 N8 H. ^3 _' k1 E
// diffusion, then run "updateWorld" to actually enact the
) N7 U3 `) C! M- \6 B3 c! | // changes the heatbugs have made. The ordering here is3 L( {( I7 u Y. L1 q9 x
// significant!; R$ A$ n6 L- E
6 L3 P) m) v0 f1 R" [( Z) a // Note also, that with the additional
2 h& P. ], T, t9 N' {) m // `randomizeHeatbugUpdateOrder' Boolean flag we can, {% e4 X0 X/ D
// randomize the order in which the bugs actually run
! v5 K ]" T& n5 L; } // their step rule. This has the effect of removing any3 n; j3 }/ L i, N! f* g* U
// systematic bias in the iteration throught the heatbug
5 a. p4 i, \2 h/ p // list from timestep to timestep
3 C: T! Y1 x0 |; a9 U
8 N1 l; `$ P1 T' T0 [ // By default, all `createActionForEach' modelActions have
6 ]& u( \3 |0 I, [. M" U // a default order of `Sequential', which means that the* U4 E/ O1 E# m% S+ n
// order of iteration through the `heatbugList' will be- E5 }$ `0 W9 O1 I+ J' s/ U
// identical (assuming the list order is not changed
7 B: u' N3 I* x. E O // indirectly by some other process)./ m; B: s' L1 A ^, E) E# Z5 ^$ r9 k4 c3 J
0 K4 i$ m8 R& {6 d. M+ F" y. d modelActions = new ActionGroupImpl (getZone ());5 B ?3 Y: W0 K7 [2 u0 L9 H
4 C6 A( H: J* d/ W/ |" n
try {
1 ]4 i, O' X3 s- p/ T/ a, ~* Z modelActions.createActionTo$message
+ _( g+ \7 C5 o (heat, new Selector (heat.getClass (), "stepRule", false)); H5 ^' a; ~; e5 L! S1 `
} catch (Exception e) {
2 `( f6 D! q- Y! W! z5 `) F5 b System.err.println ("Exception stepRule: " + e.getMessage ());& D( ]7 t! l' G3 e% H
}
6 X3 Y9 H/ |1 |2 f0 K3 e0 Z: p: K! I' \
try {
4 M6 x% K& { a0 H Heatbug proto = (Heatbug) heatbugList.get (0);
! R+ p( r; x: q Selector sel =
+ l2 n$ F( b4 ], o new Selector (proto.getClass (), "heatbugStep", false);
! |0 i3 w8 Y1 W# H actionForEach =& ? q5 O f) k% `- o5 U3 T
modelActions.createFActionForEachHomogeneous$call' N" H* @+ |4 R0 v5 R$ @' ^0 |
(heatbugList,
- L8 l% m% c+ P t new FCallImpl (this, proto, sel,7 _5 q3 ?7 }( l6 Q. V7 }' y
new FArgumentsImpl (this, sel)));
/ C; s+ w3 I: ^6 O4 V' j2 z } catch (Exception e) { P4 D' @/ Q5 Z; ^/ E! }9 Z0 N3 a
e.printStackTrace (System.err);; x, E( ^' o: X" n6 o
}7 m6 K0 q( S2 T! t$ y P9 U; I6 \. F
, w1 d$ L( ~7 j0 M! F syncUpdateOrder ();
: `% R) R( ^: |" O: m% e' ?( ]5 N
try {
0 w0 L, f! \( g$ v# \3 Q; e modelActions.createActionTo$message : S' Q, X5 ]# K4 j' B. T
(heat, new Selector (heat.getClass (), "updateLattice", false));
0 r2 a- u% o- K: q0 f: b% \ } catch (Exception e) {
; R8 f r0 [ A# X7 f p4 k/ ^ System.err.println("Exception updateLattice: " + e.getMessage ());6 ^8 U1 F& a8 d. W
}) J4 X& l8 w% }* X# |0 a' [
* i- C- {+ U: j- I, e4 @2 o, n // Then we create a schedule that executes the% c/ @3 i' V0 V* N$ Q V4 p
// modelActions. modelActions is an ActionGroup, by itself it/ T) Z' _" l2 u- |+ {! P R
// has no notion of time. In order to have it executed in ?: ]" r& }8 p: Q' j1 @7 C1 \, s
// time, we create a Schedule that says to use the! g5 z/ g! `8 @" _9 }9 r' c
// modelActions ActionGroup at particular times. This5 J0 @4 J& q. J7 S( |4 G2 }
// schedule has a repeat interval of 1, it will loop every% N4 O$ o) F( \. N$ ^
// time step. The action is executed at time 0 relative to% q+ L, a t1 ?$ w
// the beginning of the loop.
. T4 l8 q; q( _- p4 ?5 z! n- s [( p* K, ]) U
// This is a simple schedule, with only one action that is
0 X0 r' u" \6 T& q# c- ?5 \ // just repeated every time. See jmousetrap for more
' Z) u |: B( b; r1 D+ J+ B2 c. V# Z // complicated schedules.
0 u* A3 x9 k, g " ?6 u6 A% }3 B* V5 i
modelSchedule = new ScheduleImpl (getZone (), 1);
/ T( t6 w b7 w7 ~7 g4 ~* W- s- r( Z modelSchedule.at$createAction (0, modelActions);5 H$ ^& N7 h# L% m) n; |
6 s4 ^7 n L% H7 C: N return this;
( U& ~) j% [' T Q% F } |