HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& }# U3 U2 C3 K+ m
" V" l j6 E: g/ w public Object buildActions () {* r% P: @$ x- Q8 c
super.buildActions();/ @, K7 i. ?# L2 ]1 S \
: G7 g8 j8 `9 W0 Y# z // Create the list of simulation actions. We put these in
( f- I& N! t4 L+ v9 L8 r // an action group, because we want these actions to be
1 a- N: \3 J, T3 a2 Z4 g& @7 M1 d // executed in a specific order, but these steps should
/ l8 E/ {4 `. b" }% ?* W9 c. f // take no (simulated) time. The M(foo) means "The message
2 w: f7 d; R$ b3 t // called <foo>". You can send a message To a particular+ `: ~' u$ k7 _
// object, or ForEach object in a collection.' h9 v" F D6 a$ l
! F# a0 I! H$ O3 S // Note we update the heatspace in two phases: first run& P* y5 E* s/ b. V+ s0 b
// diffusion, then run "updateWorld" to actually enact the0 n; P! I9 }. {0 C3 X2 N
// changes the heatbugs have made. The ordering here is
; \/ J+ q2 |: V // significant!6 I5 p9 M) k+ B. m3 @9 R$ O4 O
* \7 ?' Y/ P% C" | // Note also, that with the additional
x1 _( _+ g2 D K. L // `randomizeHeatbugUpdateOrder' Boolean flag we can
' J) E6 z r2 @, r5 j+ n, q // randomize the order in which the bugs actually run
* s8 O% ]+ ^ {4 {# L D) i' @ // their step rule. This has the effect of removing any
9 q0 r* X* ~; e // systematic bias in the iteration throught the heatbug7 w( d$ @: ]( S" K' a
// list from timestep to timestep
1 N- Z2 E3 h- i# G5 c( d- `
( T5 S9 ~# r8 {; D* T7 x // By default, all `createActionForEach' modelActions have% t4 s0 T; k) E# a3 [
// a default order of `Sequential', which means that the
/ N; f. C3 ~9 f // order of iteration through the `heatbugList' will be
& c4 f9 S$ F: O8 f2 L1 q // identical (assuming the list order is not changed
% i* ~7 C9 m% Y$ j0 @' J6 s // indirectly by some other process).
. ?! L) p; T3 {1 ]$ \6 r5 G: J 2 R6 V7 }% q+ J
modelActions = new ActionGroupImpl (getZone ());
9 B" q R. I; Z* e0 S) b
/ f2 v0 w% o# h& Q% z! |' |1 J try {
% d# ^3 b; N v1 U modelActions.createActionTo$message
5 k3 E2 @# v8 b (heat, new Selector (heat.getClass (), "stepRule", false));
9 `4 n, ]0 S, f) c6 p( \, [5 z } catch (Exception e) {; u9 a% i) J( }0 x
System.err.println ("Exception stepRule: " + e.getMessage ());1 K: ]1 U: @% ~5 `4 p
}
- ^. d- [2 h8 o( d& u# D& \; ^0 R6 ?* p9 ?* L. ^% L! |
try {5 G `" p9 u$ B* Q/ w
Heatbug proto = (Heatbug) heatbugList.get (0);
$ F- P5 G8 N* U' _0 u: v Selector sel =
% `- C; I6 R& g5 c# }" p new Selector (proto.getClass (), "heatbugStep", false);+ P( }5 E. f( }- V1 W# A! w- d+ j
actionForEach =
8 D% E; G6 @0 F modelActions.createFActionForEachHomogeneous$call
& B4 J8 |) w& l. l+ T1 ~7 A (heatbugList,8 I7 [2 Y& |: T+ c3 ?2 n
new FCallImpl (this, proto, sel,! G/ ^. q8 d9 V- ]
new FArgumentsImpl (this, sel)));
- @7 j/ h; ?/ d } catch (Exception e) {# D4 _3 n$ g0 h
e.printStackTrace (System.err);
, u* h2 O% e5 O: g' T }
6 Y" r2 X( | P" j/ x5 B7 e 1 T# H) u, t0 X. Z8 J6 A5 O) O
syncUpdateOrder ();
2 j, ~! k1 p8 m5 Q: I4 A, V+ ~+ Q+ L3 B4 a
try {
8 B: Y9 F( o! j$ p modelActions.createActionTo$message 7 [# l; J5 [" t
(heat, new Selector (heat.getClass (), "updateLattice", false));, W- n9 d' z; G+ r [
} catch (Exception e) {
7 n' ~# G/ r8 Y System.err.println("Exception updateLattice: " + e.getMessage ());
, V/ m9 c: N" ~* K }
5 D. ]% S' \. n4 K! Y# a( F6 W) T. J
) }9 G) v" y3 W& q' _6 m& b // Then we create a schedule that executes the
1 K; e" w4 K* D8 n# c# { // modelActions. modelActions is an ActionGroup, by itself it9 E0 A' P$ ?7 \# h+ g
// has no notion of time. In order to have it executed in
6 G" b: w6 ^" j1 u1 D$ O // time, we create a Schedule that says to use the( o4 S5 ?# M6 T
// modelActions ActionGroup at particular times. This8 d; g9 i4 Y: w+ u: S. N2 {
// schedule has a repeat interval of 1, it will loop every6 l+ \* f5 k( O& s" _0 {
// time step. The action is executed at time 0 relative to) d6 W% J$ }5 B+ x' c0 k& p2 [: ^
// the beginning of the loop.& W6 m1 M$ P; e* B( b
; x N+ @- h: s8 H! c
// This is a simple schedule, with only one action that is2 M" k' F7 k+ ~/ Q5 e ]
// just repeated every time. See jmousetrap for more- k7 F' {" U% a, ^" Y
// complicated schedules., T; t9 |1 J/ ]" [/ l3 y
7 l4 y) W9 H. F) B d, E J5 C
modelSchedule = new ScheduleImpl (getZone (), 1);
- E0 P ~6 I6 w modelSchedule.at$createAction (0, modelActions);
0 L" S3 I2 m. P# b8 e- K
" m* Z0 l( z \ [" Q return this;) f9 c* n( @# r' s$ W
} |