HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 v( p5 F) ?! K
0 h+ \& k, m/ D
public Object buildActions () {$ c7 F9 X# J) W C
super.buildActions();
) E" z% @* j I/ p- C' ^ + I& N: z& b) [/ D
// Create the list of simulation actions. We put these in
9 I v" r* {* M' B // an action group, because we want these actions to be( W* v8 d! \) }+ m2 ]5 Y- S) M* y
// executed in a specific order, but these steps should
* E" R7 M! C5 ^! g // take no (simulated) time. The M(foo) means "The message
5 `0 r g% ?4 p" @( Q // called <foo>". You can send a message To a particular9 L5 y7 u6 _+ N) H$ z
// object, or ForEach object in a collection.
* v) f& f5 _9 H7 E0 W! H4 B ; o2 L2 Z& f6 f4 Q6 Y
// Note we update the heatspace in two phases: first run$ ~1 ~, w1 ^6 k! v9 T2 r
// diffusion, then run "updateWorld" to actually enact the
2 U+ e0 a7 C1 ?3 W$ G8 e! T$ | // changes the heatbugs have made. The ordering here is' X/ h0 |" E9 x& R \% N5 I, p
// significant!
7 F# \: V/ K$ B' ?4 i5 ~ * @3 I* V$ v; O9 U' H
// Note also, that with the additional
L) m( x; ?5 B3 u! T2 F5 {% g* i: B0 l t // `randomizeHeatbugUpdateOrder' Boolean flag we can
1 y/ l: N) f: Q5 Q& r5 p // randomize the order in which the bugs actually run
2 ~7 u6 L# c2 k. E' z1 Y // their step rule. This has the effect of removing any9 r8 _7 D7 m1 r
// systematic bias in the iteration throught the heatbug4 ?" s' ^& V* ~2 C
// list from timestep to timestep
! _% O; x8 J6 [% N1 n
X# d2 w$ Y6 b- U1 `5 L // By default, all `createActionForEach' modelActions have5 {- k! t: o6 @; p+ ]
// a default order of `Sequential', which means that the
2 J$ S8 G. c6 N Q9 d5 l // order of iteration through the `heatbugList' will be
4 V3 o- W& `& r; ]5 K0 ]" j+ B // identical (assuming the list order is not changed$ @. T- s# M, n* W* X- p$ F
// indirectly by some other process).
1 C1 J- O' |+ k' g7 H
+ K1 H1 T0 C- `- z6 r$ D modelActions = new ActionGroupImpl (getZone ());3 g6 e4 N& P: l& t3 V$ h
0 W! P* p) K" s+ b
try {! B) \8 U1 F. B% B' \
modelActions.createActionTo$message
2 U- B$ |1 K2 K# X: Z2 ^ (heat, new Selector (heat.getClass (), "stepRule", false));
; l9 X* M% K1 i1 K `3 A( n } catch (Exception e) {
* M" G; l3 T8 d, Q+ v" r# i System.err.println ("Exception stepRule: " + e.getMessage ());
0 u# U2 y: }8 H) _ }* @: i3 J, \+ P1 w6 x/ C
3 q0 f. Z, l- Y0 r! s try {
6 T7 x2 P% F4 o8 ] Heatbug proto = (Heatbug) heatbugList.get (0);' s* Q/ ~" T/ O" r! g1 b
Selector sel = 2 i+ K: U: Z$ N x& w# |1 K
new Selector (proto.getClass (), "heatbugStep", false);. I% f \/ X- x! k- @" T6 Z, m% a
actionForEach =
+ C& s3 E: u+ K: M' z modelActions.createFActionForEachHomogeneous$call
# i8 Q7 c$ M9 v (heatbugList,
. ?& f' L- X% m( y new FCallImpl (this, proto, sel,! [9 D& N' [2 u! ~
new FArgumentsImpl (this, sel)));
" J) E9 a, O' |& K1 x0 E } catch (Exception e) {
- u4 R! A' V: |0 R0 u# W e.printStackTrace (System.err);
) `" G- x3 l5 L8 T }
) |% A- ~1 d- t4 G, O/ ^ L9 F1 ~ 6 r3 |' |# L/ ]
syncUpdateOrder ();. E, U7 J \/ l7 U3 h" n/ t! I
0 @, A( F8 |7 l' R/ ^ try {
% [/ p4 o+ \" u }- ` W, _ modelActions.createActionTo$message 8 u, R9 j7 X. y( }2 u! F
(heat, new Selector (heat.getClass (), "updateLattice", false));
, } s0 F* @" U! T5 T) s1 @$ @4 l } catch (Exception e) {
5 f5 ^/ \; g- e System.err.println("Exception updateLattice: " + e.getMessage ());
3 U, N" o) D. N% e0 p# i) H }4 R8 g6 G4 x" ]
$ ^/ F' `0 t9 T3 q! N
// Then we create a schedule that executes the8 t4 o/ B9 X1 P9 `: T$ c$ }
// modelActions. modelActions is an ActionGroup, by itself it- `. X" l, \% R1 [8 u: H0 ~
// has no notion of time. In order to have it executed in
- `) x) ?+ g) L6 r. b; M // time, we create a Schedule that says to use the
# u, T6 F) m2 d! A* u4 K // modelActions ActionGroup at particular times. This
. w9 a: F! w3 W // schedule has a repeat interval of 1, it will loop every- ~: U4 Q: t, P/ P3 D* N7 _
// time step. The action is executed at time 0 relative to
9 q" }! w* {% i, t // the beginning of the loop., t; V6 {! d8 l0 j2 i9 w
f" n) e% X# l! S5 E5 l4 I# w // This is a simple schedule, with only one action that is
7 q9 H& H8 p+ u9 c // just repeated every time. See jmousetrap for more
6 ?! \1 @4 Z* H. E. e // complicated schedules., h' Y" N6 Q- h5 Z# J9 o1 n2 ]
& K/ c/ ^) |/ Q( d7 z3 b9 q ^
modelSchedule = new ScheduleImpl (getZone (), 1);5 z# i) W& S" C
modelSchedule.at$createAction (0, modelActions);5 Y0 w2 H! V. B7 ?9 J+ |' e
9 Y, L' o9 O7 f& @
return this; ^6 c: k. j8 T1 K- e2 R5 L9 H
} |