HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' N) l* W2 F0 w- X. I$ X8 y' [2 u- Q0 U" Z( W
public Object buildActions () {
! ~" B. {$ e/ W super.buildActions();2 B% k8 L, U+ l
: ?% L: e4 @ _% q
// Create the list of simulation actions. We put these in5 B1 `3 @3 Q U9 U1 t+ {3 c2 y
// an action group, because we want these actions to be9 @$ |& N2 Q0 P: }
// executed in a specific order, but these steps should) q/ R, {, P/ y* a8 Q7 F' _) S
// take no (simulated) time. The M(foo) means "The message* c! T. @' R7 y
// called <foo>". You can send a message To a particular
8 {# p) _! M; T( Y! q: ?/ i // object, or ForEach object in a collection.& C; n! X7 W( h G: Q. d. g6 P$ w
5 i, s" s5 N* U4 }1 d+ q( s // Note we update the heatspace in two phases: first run4 I0 L' l/ e1 x. p* @( Z, d
// diffusion, then run "updateWorld" to actually enact the3 g& f5 v& L$ e3 M
// changes the heatbugs have made. The ordering here is
8 x7 f$ E# e' O // significant!
: D3 i- m5 G4 `8 v8 I
: v% n- S$ x! w G$ D& l8 ] // Note also, that with the additional
4 @* i; d9 O: {9 `3 e: ^$ g // `randomizeHeatbugUpdateOrder' Boolean flag we can
; \5 E# g# l0 N5 h7 O0 } // randomize the order in which the bugs actually run8 k s' S7 @, S) i! K/ n
// their step rule. This has the effect of removing any3 F! p; y4 E( Q& C3 v2 w
// systematic bias in the iteration throught the heatbug1 q. w' n0 M! i6 A0 E2 R/ W9 {
// list from timestep to timestep5 }! Z/ b' {' f2 `, q: p& |
, D4 m V/ U* e e9 C( S- i
// By default, all `createActionForEach' modelActions have
9 d" z% ?3 [, V" t4 [9 L // a default order of `Sequential', which means that the9 R; p. m7 ]# u) p
// order of iteration through the `heatbugList' will be
5 G. a5 _; d+ w9 I ?3 W // identical (assuming the list order is not changed5 o- ]4 R) f3 e0 k# U+ q
// indirectly by some other process).
0 @/ i! T0 A: v5 t1 }
8 R! Q) Z f9 U( T. r modelActions = new ActionGroupImpl (getZone ());; ?1 c6 L3 t* r& }" Y2 _4 t/ v
# v+ ?! D m/ v# d/ j+ g- [: Z5 i try {3 r' I: Z6 `% ^' v0 P% @
modelActions.createActionTo$message
' u; i* Q' h: ?2 X' `+ m8 w (heat, new Selector (heat.getClass (), "stepRule", false));
) U1 r5 r& M$ E" Z5 p } catch (Exception e) {
~/ y5 E' t6 [% K9 C1 @ System.err.println ("Exception stepRule: " + e.getMessage ());9 `7 N0 t. f$ t/ G
}4 n w' F5 x" j. X
5 w0 _8 s0 R+ q7 v' o' y7 B
try {2 O0 `' F& j+ @0 J* n f4 w
Heatbug proto = (Heatbug) heatbugList.get (0);2 H0 G, Y( v" [! I
Selector sel = . `8 |/ o# P9 V& O1 _' J# t. \
new Selector (proto.getClass (), "heatbugStep", false);
" ]4 V. [ i, [& z, G( l actionForEach =
0 g! }! B) M. u modelActions.createFActionForEachHomogeneous$call
# j& z. C$ G( J& f5 w6 f: A. U (heatbugList,9 q# Q% ]# `( E8 P- b. r- c1 P1 e0 L
new FCallImpl (this, proto, sel,
/ \& q$ p7 B8 J! S3 @ new FArgumentsImpl (this, sel)));$ X: @8 L X- v Y
} catch (Exception e) {/ X* i/ Z* C# l c1 N
e.printStackTrace (System.err);
% U) G T( Z& H: c7 W5 \3 O9 u }
* T6 ]; i' q, O
& w3 f$ Q! P7 I1 p syncUpdateOrder ();
# f" j; p; W* @9 O0 f. `5 {
+ _: w; q) ~1 G& s try {
3 |$ s3 I, k0 P( u2 _6 @! Q modelActions.createActionTo$message 0 _% N. }& J; X- _- l! `
(heat, new Selector (heat.getClass (), "updateLattice", false));9 Z, O7 d5 C9 O
} catch (Exception e) {
5 t4 p1 Y i3 _ b1 ^9 T. I System.err.println("Exception updateLattice: " + e.getMessage ());
# D* s. L7 P1 ?5 v/ F }( l9 H1 m% x' P+ D; t
) d `- p5 Y* M3 x. ? M // Then we create a schedule that executes the4 \% P0 F+ a: ]- }
// modelActions. modelActions is an ActionGroup, by itself it6 X6 p& L( k* Y }6 C! |8 } B
// has no notion of time. In order to have it executed in
$ X* e3 W: v4 P7 f# ?( ~- W // time, we create a Schedule that says to use the
/ z; p' f/ z- P: [ // modelActions ActionGroup at particular times. This4 t* }1 x: \" F8 n0 n* B
// schedule has a repeat interval of 1, it will loop every8 o1 z0 A5 L7 _6 n4 P, m& z
// time step. The action is executed at time 0 relative to# E9 u) O# Q7 Q: z. t
// the beginning of the loop.. _, ` m8 v0 n, h/ s
3 |! V; `8 y- C1 B0 e) E+ B // This is a simple schedule, with only one action that is
' ]- b8 B; B. v { i1 G- ` // just repeated every time. See jmousetrap for more
/ J" M2 B' ~5 \$ }% v1 V // complicated schedules." n+ n7 z, e0 u. W9 b
' q* a. D0 [( D. `: B. U- z# T modelSchedule = new ScheduleImpl (getZone (), 1);4 y1 d3 ^: u* i0 }
modelSchedule.at$createAction (0, modelActions);2 _; U+ a1 j7 b. Q' C6 I3 b
8 `0 q) Z8 K& t6 c return this;
# @& w) s7 @8 A% e7 ^9 a, [ } |