HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: m8 x# X8 O7 b( K4 ^/ b( g; B6 {
$ A. h. t! G, V" l) S& w
public Object buildActions () {
2 Q; V5 j) p Q+ E& r' N) A super.buildActions();; N5 g D) _ T
1 l9 ~; V# l8 `
// Create the list of simulation actions. We put these in# T8 O) Z. I4 d/ L2 g
// an action group, because we want these actions to be, p& l! V! |* a
// executed in a specific order, but these steps should
6 J! U7 [& U/ r9 J // take no (simulated) time. The M(foo) means "The message" o: T' W! j9 v
// called <foo>". You can send a message To a particular
; o' g! A* l# P& ?# h // object, or ForEach object in a collection.
/ G8 h8 j# I' G! P
' y; @$ I+ A4 R% O // Note we update the heatspace in two phases: first run% q8 ^( Y8 u- _ D$ p
// diffusion, then run "updateWorld" to actually enact the
$ A, W# v9 w! S' t/ U T. ]$ | // changes the heatbugs have made. The ordering here is- G+ b+ I8 r; E D+ n
// significant!
* t v, ^! W4 b
2 K3 P" |) {* J. @: c // Note also, that with the additional
) o) ?, j6 L- q // `randomizeHeatbugUpdateOrder' Boolean flag we can4 z% B& S4 N0 d" Z8 G
// randomize the order in which the bugs actually run2 {. I8 X, E! i j; r ^
// their step rule. This has the effect of removing any
) I" a3 A8 b E5 M* p y // systematic bias in the iteration throught the heatbug' P8 r4 t3 P/ e. ]/ Z
// list from timestep to timestep
2 e) Y e) u8 j' B/ G
6 i; V* M5 a% T# Q // By default, all `createActionForEach' modelActions have& |9 {# I$ F% \
// a default order of `Sequential', which means that the
) N6 K0 F8 F1 t // order of iteration through the `heatbugList' will be9 n! E% u1 v! |% }' t
// identical (assuming the list order is not changed. T' e- m% j/ Y! n4 B
// indirectly by some other process).8 [2 [: v4 B( V: W9 V8 H
" a2 ^( J! `: a+ X modelActions = new ActionGroupImpl (getZone ());
& _3 k8 E% t, i9 E$ h7 a, W* G) U) S/ |" W
try {6 f7 R, ~( A5 [8 \
modelActions.createActionTo$message+ {; f7 E; Y) a
(heat, new Selector (heat.getClass (), "stepRule", false));* j0 l5 D5 v1 ?% R8 `3 T. r
} catch (Exception e) {3 l3 ^( c1 x, R3 r5 o! M% B. U: s
System.err.println ("Exception stepRule: " + e.getMessage ());* I3 g& e4 L+ a: G7 X: |$ f1 N
}# W4 y3 L2 ]4 K) j! ` S9 T
/ m2 n0 ]% r6 w5 S% B) l& E try {
4 M+ K! N) t4 ]$ O& v( X% F) F Heatbug proto = (Heatbug) heatbugList.get (0);+ B9 }7 t* Z7 v3 L" _: l9 z2 E, M
Selector sel = 4 s* r) Y9 u( O/ J) Y4 h
new Selector (proto.getClass (), "heatbugStep", false);8 W3 j; C% y. Z; t8 d) \; }3 j# ?0 L
actionForEach =& l" W! |/ ?2 w% k8 p* n
modelActions.createFActionForEachHomogeneous$call& w9 |9 Z9 |/ e* G
(heatbugList,: @! W# }1 `* E; n$ U4 T7 {1 u- V
new FCallImpl (this, proto, sel,
& Q' H @( g. f/ L' m! ? new FArgumentsImpl (this, sel)));1 @ j# a5 H$ t0 B9 W* L; b
} catch (Exception e) {! p+ p, c* z( N- P# Q6 _3 M
e.printStackTrace (System.err);9 D; b9 |0 v9 N9 O& y, X
}
. G5 w8 y! W5 g7 R( A! [ 7 Y1 \# k Y. |# U- s
syncUpdateOrder ();
; [ |- I" A6 a6 K6 }) ` `/ o1 _
try {
L8 H! f. O/ g) ?2 n# u; ] modelActions.createActionTo$message
2 d6 a8 u% G ]% j# b$ r5 t) h (heat, new Selector (heat.getClass (), "updateLattice", false));( [+ ?" l }9 g" ?) {7 S3 M
} catch (Exception e) {
5 Y, g* P; b* f6 x% d8 K J System.err.println("Exception updateLattice: " + e.getMessage ());0 p( Y8 ~) Q' i3 j, r ?
}
# i" \$ K3 w! i: y* C! T
) q0 u, q9 m2 I6 D2 O% e // Then we create a schedule that executes the
$ X! @) C, @+ N# b. d. r4 e& ~: h // modelActions. modelActions is an ActionGroup, by itself it
+ F- E/ y8 e0 Z& O7 z // has no notion of time. In order to have it executed in
& m6 e+ T3 c" T0 W // time, we create a Schedule that says to use the& n; t, F; W; Q1 ~
// modelActions ActionGroup at particular times. This
3 g; A# v. v) k \/ q' B // schedule has a repeat interval of 1, it will loop every$ y5 O% O( O% L# s! t+ L, o1 _
// time step. The action is executed at time 0 relative to8 Y2 z* r K z; k& R6 {
// the beginning of the loop.; m& b4 k" w$ y3 o9 [7 G
" Q/ F' u( }/ B5 d1 y5 r: x) f // This is a simple schedule, with only one action that is3 r3 C; k. i) E* F5 L/ ?
// just repeated every time. See jmousetrap for more4 i& N) a# X! E' t3 q
// complicated schedules./ K% Q }" F7 k
( p/ e5 h6 ?1 M, {6 U modelSchedule = new ScheduleImpl (getZone (), 1);& l) v1 j* W3 d' s9 g
modelSchedule.at$createAction (0, modelActions);2 X9 i) }8 V/ c3 N- U& Y3 H
6 R- O$ C/ c) ?. i& w* @# E
return this;
$ [- |6 t, k! E: D) z& D H5 y } |