HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ G5 b1 u+ X) i0 R5 r+ b: J7 U
- J# ]" v* ` W2 w, a3 M8 P
public Object buildActions () {
. D, @3 P, g+ r, a% J super.buildActions();; o4 I4 Q/ n5 f2 q1 N( W2 N
: ^ G9 W6 \- x7 o, e' \ // Create the list of simulation actions. We put these in! n% f" l/ a& `& ?9 L2 B0 c. i4 [
// an action group, because we want these actions to be
( d$ I: q2 }% L9 m6 H2 C) A // executed in a specific order, but these steps should
8 @& _- K+ v$ ~; i, p* W // take no (simulated) time. The M(foo) means "The message# T8 U) h3 _7 w) w' ~& e
// called <foo>". You can send a message To a particular5 Q; e l* x( {- C+ a8 Z
// object, or ForEach object in a collection.
- |: r, Y) ? r) X: G' p% w1 ` 8 W6 c5 E6 u6 F1 E3 n4 w3 O
// Note we update the heatspace in two phases: first run
2 c- i% b8 O( k, u // diffusion, then run "updateWorld" to actually enact the2 T: k. t' T# t- v/ S9 s
// changes the heatbugs have made. The ordering here is
" P/ g: {% D+ v$ O) m& z+ T // significant!" O; ^. S# [2 o/ x) J% E
3 ~! a' }! n" ^6 ]! l$ q
// Note also, that with the additional
7 I. [. L% g. E, } // `randomizeHeatbugUpdateOrder' Boolean flag we can2 v- |+ l7 q; U3 F
// randomize the order in which the bugs actually run
& B1 d. @) A6 P( ~: V& T // their step rule. This has the effect of removing any! Y' ]* [) V+ G6 t6 V
// systematic bias in the iteration throught the heatbug' k& }- f5 F! e
// list from timestep to timestep# `% m9 w% K' w3 C4 E0 Q
1 h! t0 c$ j/ i, E
// By default, all `createActionForEach' modelActions have
5 F8 n+ c7 y' r- I9 ^9 I5 h. M // a default order of `Sequential', which means that the
6 w" p8 D+ [; }; _; _% s // order of iteration through the `heatbugList' will be2 Z1 @0 V8 p% F: e5 G: N
// identical (assuming the list order is not changed# |5 o2 p4 X4 j2 z9 j
// indirectly by some other process).
9 o4 k7 z+ @; C Z, L4 k8 A ) X- b: M/ n" J* U
modelActions = new ActionGroupImpl (getZone ());# k2 y& [" x9 n d+ F2 Q- C& V
( W/ N& ^, n, v6 t2 r6 u
try {0 u) L/ U7 C- Q; h# `9 s
modelActions.createActionTo$message, s+ Y6 q( Z8 {, ]( w' Y* A
(heat, new Selector (heat.getClass (), "stepRule", false));: r2 r7 b) l$ e' E$ a1 R+ l) A' w
} catch (Exception e) {
: D$ X$ s, a5 W System.err.println ("Exception stepRule: " + e.getMessage ());6 Z( f% e4 H6 d) \5 ^- \
}
: i: X, P: ?! V) }$ d- o
% n: Z8 H; [1 h' a. Z8 n" S try {
) Y$ c/ U2 j7 j3 F Heatbug proto = (Heatbug) heatbugList.get (0);
' z8 z2 s- D1 K Selector sel = n# r5 q5 H7 M- ^& \
new Selector (proto.getClass (), "heatbugStep", false);9 e2 |% \% N/ |+ }' u2 L9 t
actionForEach =; d6 X6 T8 s& c7 O% o
modelActions.createFActionForEachHomogeneous$call) v5 p8 O5 g' `& F" j9 M. a) a! H
(heatbugList,* C' e: x9 r% h- m' J0 I
new FCallImpl (this, proto, sel,
4 t* f# y) Y% W new FArgumentsImpl (this, sel)));. J( }, z' M1 M3 }' s% o8 C
} catch (Exception e) {# \7 j- _& W L. Q) Y
e.printStackTrace (System.err);% `6 `/ Z6 }/ S2 O- h! V
}
1 h2 k2 E/ B) S4 F2 A& e . t4 y% |# N* i q; [' o9 W- H
syncUpdateOrder ();% L/ s; h$ F/ ^ n1 u4 E
0 b. H& g( ]4 t! {2 `/ D5 r" o5 l try {- ?9 X5 o V+ Z: o1 Q
modelActions.createActionTo$message
9 i; V5 P1 s# `2 O4 c( a4 l& c (heat, new Selector (heat.getClass (), "updateLattice", false));1 s/ g$ g. |- ^( T6 N
} catch (Exception e) {
# g- p1 n( J+ V0 f0 s% J! u System.err.println("Exception updateLattice: " + e.getMessage ());% v ]: o- M3 o s* A$ q( o3 p
}, i( _) e Q2 F9 u4 W
3 F6 w* h; e2 [" c
// Then we create a schedule that executes the
7 Q J9 ^1 ^! p0 _4 [ // modelActions. modelActions is an ActionGroup, by itself it
4 v. A6 k8 O, R# w // has no notion of time. In order to have it executed in" y: `: e) ~% }5 k5 ]* p
// time, we create a Schedule that says to use the
4 m+ {- @: O5 J // modelActions ActionGroup at particular times. This5 s. M) K: d' `6 {& B
// schedule has a repeat interval of 1, it will loop every
3 p2 e4 {8 Y7 M1 @5 Q // time step. The action is executed at time 0 relative to f% I$ F, k% c& W* |1 R, k/ d
// the beginning of the loop.
. D/ t* u1 \! y7 z- |
5 K8 E% A' e9 r+ D; Q% @ // This is a simple schedule, with only one action that is) C0 \# w p* \8 _/ p4 n
// just repeated every time. See jmousetrap for more
, P/ ?0 Q' D) ?- T# f+ m; k+ T9 r // complicated schedules.
% C1 D2 C8 c- K ( T6 ~ i3 ~( A' _) J
modelSchedule = new ScheduleImpl (getZone (), 1);! F! O: H2 i1 |: \( A/ \0 C7 O
modelSchedule.at$createAction (0, modelActions);
% Y8 i; i6 ]8 ? ( b- s4 m, ?% w+ T
return this;" N/ f! y7 A! T) U. ~
} |