HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# ]! z: B7 s& o2 H% ~) O" X+ a/ W! ], n
public Object buildActions () {9 @0 v7 @1 M0 R$ x( l$ f3 s5 ~5 Y
super.buildActions();
. @& O- F0 g' g- ]: B 2 n, Q- U6 d7 ^& Q
// Create the list of simulation actions. We put these in+ b; t' h: o+ {0 a1 l( Y
// an action group, because we want these actions to be% P. M3 j( v" [5 ?. t- q3 L
// executed in a specific order, but these steps should
+ P, m. S6 q E- {0 T5 x // take no (simulated) time. The M(foo) means "The message
6 s+ i/ P+ Z+ k/ Y // called <foo>". You can send a message To a particular
" |, K b) ~7 Q H // object, or ForEach object in a collection.( V2 Y' ]3 @. A% X. q
" G3 p9 r" d& r! b% m // Note we update the heatspace in two phases: first run! n6 [. i9 ?4 E; Q% D- n' k: B' B
// diffusion, then run "updateWorld" to actually enact the6 P- I5 b( g- G
// changes the heatbugs have made. The ordering here is
9 j4 [1 e3 p- T, c" U' s // significant!
o% x8 b3 g* {- p- C! K; g% E* c
- ^9 I; Z, ?9 v t/ a* T# o, U( |' Z // Note also, that with the additional& o y' l3 x* y3 G9 r) S- D
// `randomizeHeatbugUpdateOrder' Boolean flag we can
- L# ^: A9 U5 Q% Y // randomize the order in which the bugs actually run0 K3 h( F- E" G, Z% C0 y5 b
// their step rule. This has the effect of removing any+ K* [3 H2 r3 Q- y( `
// systematic bias in the iteration throught the heatbug
7 j! k: t: M0 c' P3 M$ ^ m; B // list from timestep to timestep
' H3 N/ x* C. p0 G
- p( o& R% E5 `* U8 m // By default, all `createActionForEach' modelActions have+ z P: G. O' W% J! h9 G
// a default order of `Sequential', which means that the1 X" N$ p2 b2 ?. u2 K: b
// order of iteration through the `heatbugList' will be
; i1 ]- _# c1 M" N // identical (assuming the list order is not changed
+ [. x& x- C$ l4 ~* ^ // indirectly by some other process).
/ Z0 ~- B# t( q' s* Y/ }& R 2 Y! j2 p2 ] G9 k: r$ P# F
modelActions = new ActionGroupImpl (getZone ());0 F8 ?' E5 C0 ?/ m7 }: O# w$ u
5 I' `- G' a: V/ G) n( [4 m try {9 K+ j3 `" Z( t9 b! N( e: |: z
modelActions.createActionTo$message+ @' m9 D, ~7 j, T8 j+ X
(heat, new Selector (heat.getClass (), "stepRule", false));1 K1 f# {/ F. ~ c; l$ T3 @$ [5 K
} catch (Exception e) {
4 p" [$ \( J2 {9 u. b$ C; @ System.err.println ("Exception stepRule: " + e.getMessage ());
" ~4 S5 e5 n& C5 r& f" {5 ?1 |5 | }
, U; D: b% v( h% y& W& v
+ D$ W. m+ e/ I# r { try {
' y' a F# }1 ? Heatbug proto = (Heatbug) heatbugList.get (0);5 N( @5 P( C! m
Selector sel = + M5 y$ @7 n3 [# I, [* j
new Selector (proto.getClass (), "heatbugStep", false);; T: L1 a/ r5 D/ z+ O4 T2 X
actionForEach =
( r0 G/ u* n0 L9 s; L- O" x3 ~/ y modelActions.createFActionForEachHomogeneous$call
( M* Z. @+ _9 Q. _' h (heatbugList,
) M1 T. z2 O) ~, X3 _+ h new FCallImpl (this, proto, sel,
( a0 F0 Z# Y& F2 G new FArgumentsImpl (this, sel)));
; @: K8 c# Y2 i } catch (Exception e) {
8 T& e. t% X7 S$ P8 ? e.printStackTrace (System.err);/ r! P/ [. @" f* d
}1 ^5 V- d/ d% w6 s' z3 o
3 D- ~4 Y3 R$ ]2 t% j/ ]
syncUpdateOrder ();7 }2 e5 _7 N- P, o" F
/ F, R& I4 _. v
try {" J# R$ N5 {3 e2 q3 p/ q
modelActions.createActionTo$message
5 o* F% n; I. }* d* D (heat, new Selector (heat.getClass (), "updateLattice", false));0 z5 s4 a6 {% ^' v. g
} catch (Exception e) {0 {& X2 a! v+ L% p, l$ w
System.err.println("Exception updateLattice: " + e.getMessage ());, H* F: [& k/ O9 h3 F! F
}5 X2 S8 r8 Z9 }* Y! K2 k( U7 w
3 x2 [' `1 Q# J0 H
// Then we create a schedule that executes the
& O1 |; T- \: C- V5 ~ // modelActions. modelActions is an ActionGroup, by itself it
4 H5 q' ^5 Q/ f // has no notion of time. In order to have it executed in
8 z7 g2 K; ]5 V/ e // time, we create a Schedule that says to use the
) h% V) S: N- _* M // modelActions ActionGroup at particular times. This
' M4 _; R* ?; | // schedule has a repeat interval of 1, it will loop every% M0 }" {# s; Y; [6 j% J4 j8 w
// time step. The action is executed at time 0 relative to
2 o: J- i5 ~- ^# P // the beginning of the loop.
+ q0 i# r5 \$ u' [0 k# C, o6 h* H4 Z4 v
// This is a simple schedule, with only one action that is
! c# w: n K1 f B' z7 M0 V // just repeated every time. See jmousetrap for more. [ `! m0 c2 n% d% n3 ?# _
// complicated schedules." J8 a' F6 f [1 }
3 F% W b! {! R! J. a8 W, ^9 j; w modelSchedule = new ScheduleImpl (getZone (), 1);
}' H! M$ u z3 | modelSchedule.at$createAction (0, modelActions);
, W* r* X7 ^! B! u$ _ e% V$ i4 O( B. a& U5 a2 c: E
return this;, L) }) a; ^6 o9 H+ V! C3 ?* k
} |