HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. P& a: H$ R. H0 h- D: Q
. y: a8 v) Y8 h& t
public Object buildActions () {
# P+ u& ^4 U+ B/ r2 k super.buildActions();
9 ?' \- V6 h3 }6 r" j! t& G 7 t1 P: ^$ A! V/ s
// Create the list of simulation actions. We put these in1 E1 x! S- [5 C/ F) T
// an action group, because we want these actions to be
9 |5 X+ J( G( @ // executed in a specific order, but these steps should$ N4 J0 t* ?5 r5 C( q: ^/ Y5 X3 q' z
// take no (simulated) time. The M(foo) means "The message4 f. u ^0 ~( d$ ^8 K2 @3 J
// called <foo>". You can send a message To a particular
( u: j% R' P9 Y9 ?$ e" M! h. Z' z // object, or ForEach object in a collection.
* K8 X! M; s- C- g' b
" C- a& r, H! ]. W3 i; }9 t // Note we update the heatspace in two phases: first run
. s% @7 h) }5 \2 ~4 B/ S* \ // diffusion, then run "updateWorld" to actually enact the3 P% I8 d( I, ?
// changes the heatbugs have made. The ordering here is/ ]* }7 E1 {) c( J4 r
// significant!6 d2 f* b" P8 R9 B) I
. r% g$ _& G: d // Note also, that with the additional3 n; D4 R6 s+ ?+ o1 F, O
// `randomizeHeatbugUpdateOrder' Boolean flag we can
8 e* Q, H! N8 |4 c' f# c // randomize the order in which the bugs actually run$ m( ]( Q6 s- c8 i6 V1 {
// their step rule. This has the effect of removing any( M G+ o z% o: }9 {
// systematic bias in the iteration throught the heatbug
8 r- O2 l: X6 e // list from timestep to timestep4 V' A) E4 ^7 s7 q
8 [5 x- t; L: w& ]
// By default, all `createActionForEach' modelActions have$ [5 c7 ~ z% `3 \$ W* }6 s! \
// a default order of `Sequential', which means that the
6 d4 p o7 N9 o! ~, h7 |7 { // order of iteration through the `heatbugList' will be
- b! n( d3 Q+ @9 t3 `/ m. ~. U // identical (assuming the list order is not changed
) ^' n/ j5 C; [2 z9 V; X, w% } // indirectly by some other process).
% ]7 V% l5 L! ^( @6 u% u
. \1 c e: F! c$ x, y! h modelActions = new ActionGroupImpl (getZone ());) p( {/ g( G( X R, \. r
( Z$ o! j/ |7 N. s; r, H3 }' a
try {! J( m2 V3 G9 T6 ~1 I7 r
modelActions.createActionTo$message
* j d1 f: d: M6 j/ O% a5 [ (heat, new Selector (heat.getClass (), "stepRule", false));
$ a% Q4 |# ^* T. E' E; ] } catch (Exception e) {
, a) [+ U8 K+ f: C, m System.err.println ("Exception stepRule: " + e.getMessage ());; s4 }' g& J2 Q; u8 c& ] v ]
}; h: z. P4 H0 m
/ F I0 T+ g" y7 g: g- `2 V
try {
4 @6 E5 v) u: B4 v Heatbug proto = (Heatbug) heatbugList.get (0);
/ [9 m6 r0 Z* A% F: D" O1 Z Selector sel =
: x2 W* ?/ R0 P new Selector (proto.getClass (), "heatbugStep", false);$ x0 m: g$ x& F8 X' s- @
actionForEach =% q) j! c: x" Q& |4 q% i
modelActions.createFActionForEachHomogeneous$call
4 c1 `4 m& a( Y' c z (heatbugList,
4 b. s" m* w2 G" Y0 J( f new FCallImpl (this, proto, sel,
6 K& x7 Z7 L8 G5 @2 ?1 a5 e new FArgumentsImpl (this, sel)));
: @, F- z- W5 z8 R; O- ^, { } catch (Exception e) {5 K) U# _' F/ d6 f( p* }
e.printStackTrace (System.err);4 v- t: u2 @+ ^/ k3 {% N* b; p
}
. L/ A* w F4 _5 m5 K- o' Y [4 z6 M6 [; ]# M
syncUpdateOrder ();- l- o7 P: ^& d8 N! w
* b* d& ^$ [2 W! R try {( Y6 Q5 e& u+ t% a
modelActions.createActionTo$message & b" s+ ?: k! E q4 t
(heat, new Selector (heat.getClass (), "updateLattice", false));0 P H; n4 b! z& @* V. y) I/ }1 H
} catch (Exception e) {6 X4 g) ~9 E$ W3 ~
System.err.println("Exception updateLattice: " + e.getMessage ());! K5 @/ j) C. ], x% q2 X, o+ x
}
6 x1 h- m' d' h5 C/ G # R4 z! ^3 M$ `( S9 M
// Then we create a schedule that executes the/ L7 B7 f# g6 N6 }: _# G3 j2 r' u
// modelActions. modelActions is an ActionGroup, by itself it
% t/ X# x- O! H7 C" X // has no notion of time. In order to have it executed in6 z; Z3 N: w/ y# ~* K
// time, we create a Schedule that says to use the/ k3 ^. e) m' F. ^' g- q# T9 {) K
// modelActions ActionGroup at particular times. This
& z1 F+ t. z+ k9 D1 o // schedule has a repeat interval of 1, it will loop every
( I; j4 o; _1 k- M$ {+ I* Q* R& c3 g // time step. The action is executed at time 0 relative to! ?( w) G& m1 C/ X
// the beginning of the loop.. R) A( O' \8 `4 g/ ]
6 f0 N# S; x9 \& c. ] // This is a simple schedule, with only one action that is
! r- q4 M6 f4 R$ n3 }$ a5 f // just repeated every time. See jmousetrap for more
5 D0 F& ]0 P; K7 }* r // complicated schedules.4 {% h3 R' w8 `) Q( ?
- |3 [" I* N5 f modelSchedule = new ScheduleImpl (getZone (), 1);
& u/ V7 k5 Q" S; U* L* N modelSchedule.at$createAction (0, modelActions);
* v9 k' ?+ }: {3 R6 r9 _
5 L: w: N3 M8 ], H/ o- k4 U return this; w4 G; ?: }- P! i: j
} |