HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% @& D. G0 k W' `' H7 H* ^& P3 Q0 p% U9 x, u$ _ _
public Object buildActions () {/ L( u/ V1 T- j4 b4 A
super.buildActions();
1 ~- S m& U1 Q3 P
: |" S' a5 @: R8 f- X // Create the list of simulation actions. We put these in+ I7 J, [2 G/ G; W, I' z6 H$ h
// an action group, because we want these actions to be
- d9 @. \! z( T" \" a3 P! C // executed in a specific order, but these steps should( p, F {+ E1 n$ h' @5 }
// take no (simulated) time. The M(foo) means "The message
( \% U9 }9 r! B2 o5 M8 n: [ // called <foo>". You can send a message To a particular
# G& Y4 I- F, ^- }) J // object, or ForEach object in a collection.
" K! ?- d9 A8 l2 T9 n
: q- C; U4 f$ u$ l! c7 Y2 F5 } // Note we update the heatspace in two phases: first run
/ Z* ?) D: X9 Q3 ] // diffusion, then run "updateWorld" to actually enact the! X8 `" ]% W) L( j; B6 T8 E
// changes the heatbugs have made. The ordering here is$ w' L8 Y% X2 c+ U Z% p5 ~3 u
// significant!: Z. d! x3 o0 q( L- i4 ?6 Y) C$ X
! K; K y% F& U( y
// Note also, that with the additional
~0 W5 m) K9 ~' a c // `randomizeHeatbugUpdateOrder' Boolean flag we can7 j% x( I1 Q4 b1 P. F% m$ p' b* a
// randomize the order in which the bugs actually run
0 W) ^) k& X2 u N+ @5 q. S // their step rule. This has the effect of removing any
e! {* H- W/ {5 x8 K4 Y // systematic bias in the iteration throught the heatbug# a6 i; L, Z% _
// list from timestep to timestep
) G- o6 N8 U* b' P$ L5 K
1 u5 ^$ K2 C# l0 M( h; c' m // By default, all `createActionForEach' modelActions have T9 J8 P# z k3 [
// a default order of `Sequential', which means that the; l& _% N+ e5 _- Q
// order of iteration through the `heatbugList' will be
4 t+ u+ N: V5 ]7 L // identical (assuming the list order is not changed* n9 e1 P# c6 G$ D; ?% E
// indirectly by some other process).% A; O" [6 t# v5 R2 B9 G& H
9 L* O# ]& X- v1 D0 x
modelActions = new ActionGroupImpl (getZone ());5 |# A3 u7 v3 M
" z1 @6 r; }3 ~1 P/ G4 v try {
9 Z! A8 K/ Y5 A e modelActions.createActionTo$message9 ~; f$ t( w7 _' v# z2 r6 u5 D
(heat, new Selector (heat.getClass (), "stepRule", false));
J3 E$ C( Z8 |4 }2 Y& ~ } catch (Exception e) {
: l9 H2 ~5 ? Y. ~- j' E9 g) a) U2 @ System.err.println ("Exception stepRule: " + e.getMessage ());
{, U/ P* P0 i; N2 O8 I5 l2 b }
: n6 F1 @2 @' f* E d; ]0 E, D3 g4 A/ ]0 L' c# `
try {: s- D) t# ^; n& c6 D) h3 J
Heatbug proto = (Heatbug) heatbugList.get (0);8 d9 Y5 j$ O- x
Selector sel =
3 y/ x+ a3 ~6 `" G new Selector (proto.getClass (), "heatbugStep", false); D# m/ [% B: [) e/ l5 B7 @% O
actionForEach =
& c" g) ?( q$ q4 _" F' E modelActions.createFActionForEachHomogeneous$call
4 @" G9 {9 m, v: H (heatbugList,& }" C1 @5 T- T. Z: P2 [
new FCallImpl (this, proto, sel,5 h$ u) n8 G: H- l" D+ _
new FArgumentsImpl (this, sel)));
/ ]7 {+ l7 y: e; _8 |, @2 M } catch (Exception e) {
' `, K3 i% P' }3 `; z0 F e.printStackTrace (System.err);
' U% F8 t9 ^- [ }7 o! C8 g: s. Y
L1 [; a7 L8 C( ?2 x
syncUpdateOrder ();. w) p, } u7 V! k8 j
* z! H' A8 y9 Y. X- ^ try {; ~; G, x g! a3 ]% f
modelActions.createActionTo$message ( n# Q9 w' K8 q s( F' j
(heat, new Selector (heat.getClass (), "updateLattice", false));
, g# P( c6 c! d8 ~- R' H+ x3 l% u } catch (Exception e) {
2 L2 v/ B5 V9 h# n# a System.err.println("Exception updateLattice: " + e.getMessage ());+ w7 R# S8 W# _3 G4 j
}
2 ~) f6 l1 S) |3 i
' c0 S- j* Y$ B3 G5 @- T // Then we create a schedule that executes the
5 Q& N: u/ C5 t* i4 [4 { // modelActions. modelActions is an ActionGroup, by itself it
" E- _, a1 W& ]7 w // has no notion of time. In order to have it executed in
- R: X- M. G" e: W* t // time, we create a Schedule that says to use the) m6 {* f$ X% p- c+ g; _
// modelActions ActionGroup at particular times. This( b5 a" p# o1 F& l
// schedule has a repeat interval of 1, it will loop every
: U1 a4 c' D% F# c3 j6 M- O& z% r // time step. The action is executed at time 0 relative to
+ s; \1 j& w: W4 \ // the beginning of the loop.
# j f( I* O; a
& o; E4 S- O+ ^ // This is a simple schedule, with only one action that is V5 |& T% y; @) D
// just repeated every time. See jmousetrap for more
2 N5 L- U r7 |- k# k' D // complicated schedules.8 Q- U* u7 u& P0 X
. z* y5 a$ x$ a6 O0 i5 J
modelSchedule = new ScheduleImpl (getZone (), 1);
4 a: g$ [& z) [- B5 ~9 T modelSchedule.at$createAction (0, modelActions);
* I3 c+ L. \2 o- c! a
u! w! `, n5 \9 q( w: G: [ return this;
- S# H4 j& R% p } |