HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 D- e& B6 w; M7 v2 z, d5 \
9 X% F: z+ C b public Object buildActions () {( C4 f7 N2 r- P# e
super.buildActions();
9 A6 z) h# K( s0 ?0 h
) C' f& @# q5 h% ^ // Create the list of simulation actions. We put these in
* y6 x7 d& C$ {, Z# N9 P' n2 s // an action group, because we want these actions to be, z( w+ c) s4 h% n
// executed in a specific order, but these steps should0 z/ Z& u$ C8 k
// take no (simulated) time. The M(foo) means "The message
& Q: \/ n" _; [& p0 Q+ `/ h. U3 S // called <foo>". You can send a message To a particular+ b1 ~! n" h1 h; W$ J2 i8 y0 X# U
// object, or ForEach object in a collection.6 e ?$ _* |4 ?+ F7 a
! v& h9 @6 ~; j5 W: |$ B
// Note we update the heatspace in two phases: first run
# C& P9 e# ^! c( Z. M+ m4 z // diffusion, then run "updateWorld" to actually enact the
5 ]+ ]2 L0 Q1 H+ q: f& E8 }# n // changes the heatbugs have made. The ordering here is# X% m5 v; D3 R9 z J
// significant!; A y8 L- a1 L1 x# ^( Z2 ]
! m6 Q' j8 U8 D/ k
// Note also, that with the additional F2 q% g5 F$ b0 g
// `randomizeHeatbugUpdateOrder' Boolean flag we can/ w" Z$ _9 M/ L8 y8 r* F
// randomize the order in which the bugs actually run; p: Y7 F0 w+ u
// their step rule. This has the effect of removing any0 M ]: w4 \& z! @' x
// systematic bias in the iteration throught the heatbug* V* j! Z- k& }! w7 x
// list from timestep to timestep T& i4 \9 \, N
3 x- W4 C6 N5 S1 }: ?' i // By default, all `createActionForEach' modelActions have
: v9 r% O5 _% L // a default order of `Sequential', which means that the
3 h2 j$ |6 D# z+ W; r% I- X // order of iteration through the `heatbugList' will be' ?2 `8 k& Y+ H
// identical (assuming the list order is not changed3 w+ ]- H' S3 o1 V; R2 B
// indirectly by some other process).
) K5 Z( E2 d" z P' a$ o8 |: [# w9 V* d( i
modelActions = new ActionGroupImpl (getZone ());
8 w; K# @2 |+ M7 T. }4 V
% U% p* l" j- p. V7 W$ v' C1 V8 E try {
; |3 E$ Z; _" |# c T modelActions.createActionTo$message
9 ?# V& x+ V7 v `; X6 _; `: X (heat, new Selector (heat.getClass (), "stepRule", false));# t/ g$ S, l. {9 w/ z
} catch (Exception e) {
( i! W5 z5 W! Q' D$ O System.err.println ("Exception stepRule: " + e.getMessage ());- r/ |9 X4 Z; u/ k3 |
}; x8 f9 i" V; i1 K
' I) W. G! e8 R# \, l try {. U) } [3 I$ t! A2 g+ I
Heatbug proto = (Heatbug) heatbugList.get (0);0 n3 j5 y I! Q/ r5 F- {( }& v) q4 N# o
Selector sel =
0 |$ H5 }' f8 G' r& p. I new Selector (proto.getClass (), "heatbugStep", false);
5 ^- c; m& `6 L1 \* g- w actionForEach =; m, d- ~3 {6 k2 F' A8 |! H: o9 r4 h
modelActions.createFActionForEachHomogeneous$call' V8 ~. A& \( p7 L$ _6 c
(heatbugList,* w) H. S, }. l. N7 Z4 k
new FCallImpl (this, proto, sel,
?$ @, P' S* d8 r" t new FArgumentsImpl (this, sel)));+ j- w4 w% N; A9 L$ a7 t
} catch (Exception e) {+ P2 s9 T8 w4 T* {) p: D
e.printStackTrace (System.err);7 i v. }1 @" e" I& P. P
}# X* t6 ]4 D7 L+ `$ m6 P
, a0 U5 [, c) R0 b7 j( p
syncUpdateOrder ();( d9 c4 I$ B" d4 |' K! o# p
8 e b# ]* W* y8 }- s
try {/ ~0 Y2 c+ \% v- J( w; L
modelActions.createActionTo$message
9 n2 ~ E# @. R8 p8 @ (heat, new Selector (heat.getClass (), "updateLattice", false)); _+ b0 k f) P. Q
} catch (Exception e) {' s% M- c _! g8 S! j
System.err.println("Exception updateLattice: " + e.getMessage ());. D# q# h) v. w3 w) c( c! h8 O
}$ }" J4 a t; Z/ W
9 V$ D' q& r1 Y- D% I. K* |6 ?: C
// Then we create a schedule that executes the
& T7 l" k3 r; l2 H5 K5 _% s // modelActions. modelActions is an ActionGroup, by itself it9 c% K9 K R" \+ ^ p# o
// has no notion of time. In order to have it executed in9 T4 z: [) y: ^5 Y7 R! r# p6 e, l
// time, we create a Schedule that says to use the
) P* G" _6 L" q$ o8 _$ W0 c // modelActions ActionGroup at particular times. This% A1 F9 x2 Z5 Z, \3 Y# H
// schedule has a repeat interval of 1, it will loop every/ S9 F8 j' `- E9 e
// time step. The action is executed at time 0 relative to s: b9 _& X' g0 A, @1 }$ A
// the beginning of the loop.- n; L0 C1 o+ u6 _: b }
& `1 ^4 o, I1 r+ C, |, N
// This is a simple schedule, with only one action that is
) v l/ U: T7 s1 i // just repeated every time. See jmousetrap for more
9 L6 C& K0 x1 K" D/ S // complicated schedules.5 Z) Y' y* C; ^ M6 R( r) O
8 k( N' C4 C5 ]& F7 s1 H; Y, y modelSchedule = new ScheduleImpl (getZone (), 1);3 C/ f: V( l1 f" J) x
modelSchedule.at$createAction (0, modelActions);2 w1 R+ r9 m0 j* |! p0 I4 N( r
: X( w* k, {" H! N5 D* U. E _ return this;
# Q% \9 n: q6 @; ^, x0 F } |