HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; H, V, t0 W5 ?# _1 a
- f9 v3 M& X% W6 @- D
public Object buildActions () {
- b/ t9 T* ?* c7 m8 b5 b super.buildActions();6 S ]; F G/ { f3 B5 Z% C# c
& {" F' A% U/ j) _& \, D; I+ v0 q // Create the list of simulation actions. We put these in
2 I" t9 Q4 f% k+ V // an action group, because we want these actions to be0 R% c* S8 U0 R, I; o3 g
// executed in a specific order, but these steps should5 I6 w8 |& K+ g9 k1 T7 c% H
// take no (simulated) time. The M(foo) means "The message5 K L, a" F' F: k1 A
// called <foo>". You can send a message To a particular
+ s: k% `8 s3 P L4 X; @# y // object, or ForEach object in a collection.
/ n7 E, U% K! c: @+ { 0 _$ L7 v+ z0 W+ o4 U
// Note we update the heatspace in two phases: first run
~* b0 ]% A1 W/ |; C // diffusion, then run "updateWorld" to actually enact the
/ q( a$ B3 H9 ` // changes the heatbugs have made. The ordering here is
5 q7 j' O# [# ?, } // significant!
. i$ V+ i7 n2 f5 l8 y" N* { " K7 c% k% e3 E; h
// Note also, that with the additional
2 [6 ~6 U- |& Q9 ?2 s5 @ // `randomizeHeatbugUpdateOrder' Boolean flag we can
Y9 @8 [6 K: z) d' u' D8 M // randomize the order in which the bugs actually run, W+ m# x$ ?, W' S: a' t
// their step rule. This has the effect of removing any
& w7 b+ k, B$ Y$ b S# c // systematic bias in the iteration throught the heatbug
7 Z2 C4 W) p' d. P. C/ `' } // list from timestep to timestep# M! e' M- z, T6 ^4 F
+ A- _9 o3 d+ }: t8 K2 z! T; e // By default, all `createActionForEach' modelActions have
( N4 N& `2 d3 W0 B7 F! p! ` // a default order of `Sequential', which means that the
7 S6 k1 n( S/ z6 q // order of iteration through the `heatbugList' will be3 c9 a6 t# a& R1 Z
// identical (assuming the list order is not changed
" P' k4 u2 r1 p b. P' q // indirectly by some other process).
3 x, H3 A8 [9 W+ Q7 b & ]# @6 t4 J6 U; b) R# n
modelActions = new ActionGroupImpl (getZone ());
x* R/ Y3 O% V2 X/ M, z$ `) z$ _
try {
! ~2 ^7 m, X3 f. w8 { modelActions.createActionTo$message
6 w: d! F6 v* R (heat, new Selector (heat.getClass (), "stepRule", false));8 `0 @5 q2 x) u2 Y
} catch (Exception e) {
( V& G! [ ^& q System.err.println ("Exception stepRule: " + e.getMessage ());) D5 ~$ A5 [+ B3 @5 ^
}
# h6 E8 [1 Y" p3 W' N* D0 O/ W2 i. _
try {
]' T [. t b4 z2 O* p8 w# k& w Heatbug proto = (Heatbug) heatbugList.get (0);0 K# H0 c( F/ v! E
Selector sel =
. f& i6 H8 Y) `' k% i new Selector (proto.getClass (), "heatbugStep", false);
1 G3 J6 A& E8 h* Q2 k3 N9 C actionForEach =
; N& M. j% S6 X2 B modelActions.createFActionForEachHomogeneous$call
7 v2 O- p# M9 a% [, w+ g$ F (heatbugList,8 T) k7 }! w3 b5 a
new FCallImpl (this, proto, sel,
7 J; B$ D. u) U$ D new FArgumentsImpl (this, sel)));
# y! j' w7 W+ A9 U' X- s } catch (Exception e) {9 l+ E! Z7 T" e% S. l
e.printStackTrace (System.err);
0 g: L) H; g) Q }. _) ?4 p% L6 C9 \8 J& g
' _' D" T* ^3 d) N syncUpdateOrder ();
' i! T5 W8 k- L$ ?1 ]
, {! F7 ?) ~7 A6 e try {
8 h! E2 u' l% D* n8 \1 Z: { modelActions.createActionTo$message P2 r8 V. C* a1 p
(heat, new Selector (heat.getClass (), "updateLattice", false));
9 g1 {9 N& b' i+ V4 a, _ } catch (Exception e) {, }! ]8 u/ n* E
System.err.println("Exception updateLattice: " + e.getMessage ());; L) P- w1 G, N1 e) J
}
n9 J h( I$ s+ x7 X k' o! D 3 t, f/ O6 Z6 Q3 u; e
// Then we create a schedule that executes the/ x) w6 `! Y4 l L8 Z! [
// modelActions. modelActions is an ActionGroup, by itself it; o, Q' C" B- j2 O% N5 p% \! m$ l
// has no notion of time. In order to have it executed in. @3 P! K l0 e1 W' {# Z9 S
// time, we create a Schedule that says to use the
) ?1 `% o4 ]- c2 C9 h! @ // modelActions ActionGroup at particular times. This
- y Q4 u$ \4 ]$ L. c& C: N o // schedule has a repeat interval of 1, it will loop every
+ x6 W8 T7 Q2 P( ~ // time step. The action is executed at time 0 relative to
# ?( D' f f" x5 a2 ^9 U* w6 z) }& w // the beginning of the loop.- ^0 H4 v, y+ @! ]6 f4 p2 `
! W+ e7 X; y+ r" [* A- f; [ // This is a simple schedule, with only one action that is; Y! U3 [2 ?& _" m
// just repeated every time. See jmousetrap for more
" c( [7 l, P8 v4 h6 T& }+ w( W // complicated schedules.) M% {9 O/ @9 Q% W; }4 [
* p0 O( S5 R F' E7 j0 r8 x6 r" x
modelSchedule = new ScheduleImpl (getZone (), 1);. ^0 u& ~2 u$ O4 {
modelSchedule.at$createAction (0, modelActions);- ~3 X. o% Q! J( s: {
: P& _: R2 g+ {9 q, D+ h
return this;1 A% ]: @" v* l0 j7 i7 G
} |