HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) {) M2 Q, ?0 A' j
) F+ m+ `1 t9 ^4 f0 ^& W) O8 D( ~ public Object buildActions () {- \7 J' ^ B4 q
super.buildActions();
+ v$ y' q; M- h2 T# M% n7 k $ {' l1 o2 X" @
// Create the list of simulation actions. We put these in) v+ O; a5 k9 q/ {" z! E6 o3 _
// an action group, because we want these actions to be
+ a- J9 i7 \1 X% R // executed in a specific order, but these steps should
1 y. r8 S& f! i$ \; d7 l! e* I // take no (simulated) time. The M(foo) means "The message
' p$ c9 k [" c2 Z8 \! R // called <foo>". You can send a message To a particular
" r$ b+ J" ~# f. b- l // object, or ForEach object in a collection.
. Y9 E9 V0 ]9 L* I4 A & T2 C6 {: Z X+ n
// Note we update the heatspace in two phases: first run
: C7 u: N- b# }3 M/ N4 s, [" D; v. [ // diffusion, then run "updateWorld" to actually enact the1 A+ E' Y% _) R3 h" ~3 e
// changes the heatbugs have made. The ordering here is
, F3 t9 [$ Q( G# ^ // significant!7 d1 d; N8 M; b
, c4 ]; h7 ^3 ~0 `2 `3 P9 A // Note also, that with the additional
9 y Y" N' A M4 n // `randomizeHeatbugUpdateOrder' Boolean flag we can
0 w/ F0 J, I2 r& s4 H I& { // randomize the order in which the bugs actually run( X. ]9 T5 K) O
// their step rule. This has the effect of removing any
0 ?# o6 Z) S/ M2 }3 O // systematic bias in the iteration throught the heatbug( t3 r2 M. i( b7 |+ r4 f {
// list from timestep to timestep! k1 }. H( N9 V# f# P' a! _5 k2 x8 h6 _
6 f1 B+ i) g' h' a3 m3 V C // By default, all `createActionForEach' modelActions have! M* u) |3 R. a7 {" O3 v
// a default order of `Sequential', which means that the, f' l3 s( e$ H$ o
// order of iteration through the `heatbugList' will be0 h/ |) i, z x# y
// identical (assuming the list order is not changed0 e' h0 u6 m7 A( ?' r' R( ]( z
// indirectly by some other process).; H& c5 U9 J( ~6 n: M
$ ?3 Q" ?9 ~* |, [. U p modelActions = new ActionGroupImpl (getZone ());
Y) A2 [# H5 N# V+ c9 n
" C$ k( V( X0 J. p" ~ try {
/ a" u1 U" p' F( f modelActions.createActionTo$message' j! M0 F' A. P
(heat, new Selector (heat.getClass (), "stepRule", false));
7 v5 ]2 L+ D3 \1 ]8 I M } catch (Exception e) {
( L* J% v z# H; }$ J' r& | X0 o System.err.println ("Exception stepRule: " + e.getMessage ());3 t V, c0 y3 i; V
}
/ |+ G! k. `+ L* [. e3 A
/ d1 ]2 @: Q% Y: {# R* @ try {
$ t0 u9 K8 Z6 h7 Q* g! b Heatbug proto = (Heatbug) heatbugList.get (0);
- a# ` d; n ?! W" {' k& O# ^ Selector sel =
$ g' k: q( W! A1 B" N+ i, \ new Selector (proto.getClass (), "heatbugStep", false);/ i9 [5 N- v; g0 G4 U
actionForEach =
* _8 m7 @( L5 O4 V; | `/ Y4 l0 w& { modelActions.createFActionForEachHomogeneous$call
7 ]6 g! y' O; P) A (heatbugList,
3 T( @; w# I7 B) a% Z# i* ] new FCallImpl (this, proto, sel,
0 m9 {& F5 s5 s5 b new FArgumentsImpl (this, sel)));
; f) S E' J0 u2 S3 k; t2 s } catch (Exception e) {
& c# b$ R. a0 i% J, f) F; V e.printStackTrace (System.err);9 ?% U9 E0 [& E4 }' m
}: p% i, E; _2 Q" A3 b
1 ?% M4 l6 d& r: h& ~- y) t7 m
syncUpdateOrder ();; q5 L. ?1 o( a+ d' N% q/ p4 ]0 @ P
1 C* r! y0 L7 @( `" q5 P! t try {& q y1 h! `" D8 A. I9 v
modelActions.createActionTo$message - \ A: g& n0 y* i
(heat, new Selector (heat.getClass (), "updateLattice", false));) U, m' ~5 [) s4 q/ i& i
} catch (Exception e) {) j% \5 Y3 p @5 R9 |5 g
System.err.println("Exception updateLattice: " + e.getMessage ());
* e' E) ~8 b4 X2 O/ U/ }+ U }; N+ W7 I# g/ ~; A4 |; T3 r1 Q7 X: v
{3 q( Q; J$ a. ?4 [
// Then we create a schedule that executes the
( `* d8 U/ g# e2 u! A t; z) f // modelActions. modelActions is an ActionGroup, by itself it% ~% e' x4 I. Y3 G3 P, r% @
// has no notion of time. In order to have it executed in7 }" k! z- B6 Q) C1 R
// time, we create a Schedule that says to use the+ i7 c- |6 s$ \* ~; Z
// modelActions ActionGroup at particular times. This. F4 n6 P+ R2 W% J
// schedule has a repeat interval of 1, it will loop every$ i! d$ K/ e& x, c% e" U) c
// time step. The action is executed at time 0 relative to) p/ G7 E9 t* P- j) \8 E
// the beginning of the loop./ F# B7 b( b4 e
" w B7 Q' `6 q% m5 s // This is a simple schedule, with only one action that is+ [! A, P" l/ g3 k6 v: k
// just repeated every time. See jmousetrap for more
7 K, p, O. N T0 l // complicated schedules.
6 a7 I: O& _ R$ Y. u. n
) q1 h+ J" K, U" D' X' t modelSchedule = new ScheduleImpl (getZone (), 1);
& X2 D. a+ ^2 m) u! Q modelSchedule.at$createAction (0, modelActions);" [: P' d, h/ O4 Q6 ^$ C
% Y0 `( X# _+ \2 f; v
return this;1 \: U/ g0 n8 o: f( w- Z. }5 b8 ]
} |