HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ T( [6 }. {& l2 d5 |# Y3 [7 k3 H4 r, H
public Object buildActions () {7 C" {' [6 y0 m7 [/ L. h
super.buildActions();
6 ^) r9 x* k* Q7 \
2 ^' ^- w# {* v% C. z% _ // Create the list of simulation actions. We put these in
0 d; ~6 k4 R' f // an action group, because we want these actions to be( v& ]% g# b' v5 c. P5 ?
// executed in a specific order, but these steps should) p# W% A1 u5 u: m# G
// take no (simulated) time. The M(foo) means "The message
+ g& l( V2 ]3 z9 y0 [% Y. C5 [2 r // called <foo>". You can send a message To a particular, O) I, ^! y+ k+ D1 Y: N
// object, or ForEach object in a collection.) `6 J3 Y1 l- Y0 [2 O# E+ B' B
( `2 a& \% T7 A& m& W2 D7 J, s E
// Note we update the heatspace in two phases: first run
: F6 B! U0 l; t* W) i // diffusion, then run "updateWorld" to actually enact the
( b. h0 U( y" ]) j7 _0 U // changes the heatbugs have made. The ordering here is
: Z% A8 t* R9 L // significant!
- I' g1 N& z, T- I6 F R 5 N& Z3 \0 ^! }, A! n; [ n" }
// Note also, that with the additional; N$ ?$ n9 I8 Z7 Z J. C
// `randomizeHeatbugUpdateOrder' Boolean flag we can
: C: D2 u5 |& x+ R/ D8 F // randomize the order in which the bugs actually run. [1 t7 i8 N" N s
// their step rule. This has the effect of removing any+ ]" y1 j) V5 I+ x# u0 n/ b- P
// systematic bias in the iteration throught the heatbug1 }' y; M) W( d4 e8 `5 z
// list from timestep to timestep5 _) {6 x0 H% G( n% I. {
5 f: e6 \: F* l2 r2 M4 O# Y // By default, all `createActionForEach' modelActions have
1 j$ r1 V2 r3 x# g // a default order of `Sequential', which means that the
0 {% K$ z. i* V4 g7 n; i# u0 X // order of iteration through the `heatbugList' will be
9 x' T' c1 D: {' m+ y \. o! o // identical (assuming the list order is not changed
: _( h( S( i- a0 L/ o: ~' a7 _ // indirectly by some other process).
$ Z7 C8 ?! Y, y4 P5 X+ \ \7 f
8 x7 v" H! H0 B) }2 f3 A modelActions = new ActionGroupImpl (getZone ());
* C# I" Q8 e9 ?7 l" v1 e% ~7 ?* f# B- |
try {
3 Q0 b) m/ Z+ D4 X; H/ M modelActions.createActionTo$message
0 M% \5 z& n( s3 \$ V& D (heat, new Selector (heat.getClass (), "stepRule", false));
1 R( ~% d4 }6 I6 _% w* M( K& N } catch (Exception e) {
4 b$ j$ Z: [# W System.err.println ("Exception stepRule: " + e.getMessage ());
9 L0 d1 a; }" H" L+ c$ s0 y U }1 D9 o. C2 S: O! v, h, E" g
0 N$ u0 ~6 ^* A1 G1 r try {. h0 M/ O$ X% |" Z1 {
Heatbug proto = (Heatbug) heatbugList.get (0);
# T& L$ ]! j0 `* c Selector sel = 2 b7 H9 }& s7 {% C
new Selector (proto.getClass (), "heatbugStep", false);% o! O. s7 H+ k) Y0 ?
actionForEach =8 h, L/ k0 d' T
modelActions.createFActionForEachHomogeneous$call
, W8 x& u, Z$ d (heatbugList,
. c9 ], V3 T' r new FCallImpl (this, proto, sel,3 G" b2 s& R9 R9 D
new FArgumentsImpl (this, sel)));
$ S0 Y0 z K9 U" w1 O/ @4 P } catch (Exception e) {, d) Z0 Z! n9 }8 o5 Z, v1 l5 D
e.printStackTrace (System.err);
3 ~$ H ? G( B! _1 D3 }# j }
* L/ Q6 t, \6 k1 d+ x % g( S l7 g! n. X; n
syncUpdateOrder ();8 b3 g" {4 o% I" l1 |
& {6 D5 _2 E1 a7 W$ @
try {! d7 S" ?. \2 T; I, Z- g' l6 S
modelActions.createActionTo$message
8 m6 P3 w9 Q1 n: {: I (heat, new Selector (heat.getClass (), "updateLattice", false));/ c. l& B, m3 `% r. R. h& y
} catch (Exception e) {
8 h) T8 t4 j8 A; N1 i9 r System.err.println("Exception updateLattice: " + e.getMessage ());& M/ n7 R6 i* s8 ]4 m4 ^1 V! k- j
}
+ v8 X5 S5 V/ r9 d& A
$ P) C/ {+ e' \# b- p // Then we create a schedule that executes the
2 Y: x. R: x. ]% L) f5 l. X // modelActions. modelActions is an ActionGroup, by itself it9 V. M- A7 y; V+ a& h4 S6 x: h
// has no notion of time. In order to have it executed in
# @* _! ]0 O; S4 s. a5 S: f) {3 S // time, we create a Schedule that says to use the3 r9 J8 E ~& c# _& F) ^3 }* C
// modelActions ActionGroup at particular times. This0 A- o; }2 C* Q w
// schedule has a repeat interval of 1, it will loop every& o4 B& k# i, a' Q: p( u7 |
// time step. The action is executed at time 0 relative to! z. y+ V6 H. o5 ~6 ~9 r, M2 }& Y
// the beginning of the loop.
2 ]/ w4 m5 q8 W5 j: E- J8 m- F, e: K6 d& Y
// This is a simple schedule, with only one action that is: P. Y" j- w" U9 F1 D8 l
// just repeated every time. See jmousetrap for more
2 x8 E1 ~" d4 c+ _* T5 ] // complicated schedules.
. ]. U0 e j5 E' k 3 m8 O& x& S! f9 u; a& N3 {
modelSchedule = new ScheduleImpl (getZone (), 1);3 b: P* E/ e& j/ C# [3 h2 \% m
modelSchedule.at$createAction (0, modelActions);
# M( H( N8 J0 ]+ n/ u 8 Z; ~3 f+ \! N, t
return this;# `7 E2 O) c2 o: z; Z: C: \
} |