HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ j! m7 `' T$ k% h6 c& T9 V4 R, M9 X* O$ p
public Object buildActions () {9 E5 h. A9 C* H: _; O) s, @
super.buildActions();# G" P% I% W1 _
: b+ O1 g4 b7 e) \
// Create the list of simulation actions. We put these in# d) k2 Q J# A* Q
// an action group, because we want these actions to be6 _5 |( k! H8 }7 c
// executed in a specific order, but these steps should. x4 r( e; x9 Y/ E/ r4 B
// take no (simulated) time. The M(foo) means "The message
5 _2 Q8 K/ Q& U/ ]# R3 P' h/ e+ i // called <foo>". You can send a message To a particular3 }3 v$ Z$ a G. p
// object, or ForEach object in a collection.
8 S4 t, T. z7 Q/ z" q+ a j& i ) h+ v, q# U/ Q; M
// Note we update the heatspace in two phases: first run
2 u J( N, K" N6 i' C // diffusion, then run "updateWorld" to actually enact the
1 I( t! s+ R8 U, O2 J& S0 R+ d% t // changes the heatbugs have made. The ordering here is
' U8 {. f3 i$ g# d, ? // significant!
1 T* w( F6 y) J+ k& ^( ~. |8 e
3 G- y u1 x5 i6 Y' Z% k+ m D // Note also, that with the additional
8 f6 p: U4 x3 S // `randomizeHeatbugUpdateOrder' Boolean flag we can
$ y- v# N; I$ M; T, @ // randomize the order in which the bugs actually run
; Y% R4 w ]- H8 Z: M2 T // their step rule. This has the effect of removing any) A, [0 m* a& E1 @1 Q+ U0 o
// systematic bias in the iteration throught the heatbug
( |% q/ o* J2 ?. `4 ], |: d8 N // list from timestep to timestep
$ b2 K4 r e3 [* n
N; t+ m6 j0 h M // By default, all `createActionForEach' modelActions have
% ~' a8 N; I& w/ Y% R // a default order of `Sequential', which means that the
, e* j# E* ]; U5 r, ]' R) |3 [$ v+ G4 A // order of iteration through the `heatbugList' will be
1 r& F8 z" n: X5 X6 s* _" Q // identical (assuming the list order is not changed' l! q% |- a. m: z; V" l
// indirectly by some other process).; |! t, r& j# `. T
Y+ v5 V" b3 E O: r! a
modelActions = new ActionGroupImpl (getZone ());
7 w$ X$ [/ B2 n3 t) h7 F7 I
* s: H( R* I ^- A r* c try {
9 u1 Q" h, [8 W" E- U2 O modelActions.createActionTo$message
4 j8 r/ B! D) Z2 C7 ^# @& O& s (heat, new Selector (heat.getClass (), "stepRule", false));: ~! u: t5 e' T) E
} catch (Exception e) {6 N) X3 d& J! Q3 M) A
System.err.println ("Exception stepRule: " + e.getMessage ());
' M" I2 H5 u, P$ Y$ X }
v& j4 {+ \: z0 a: D; B, N: c: M% g* Z. O. Z
try {9 l* z) D/ a7 n' F
Heatbug proto = (Heatbug) heatbugList.get (0);; D F' `3 O( o9 @- t( G3 \- ? ?2 [, I* u
Selector sel =
0 D0 ~* q& m% m! j3 K5 }+ a new Selector (proto.getClass (), "heatbugStep", false);$ B( y' u$ V1 N
actionForEach =+ V3 E, E4 [: w, {, ]9 y
modelActions.createFActionForEachHomogeneous$call/ U' Z0 A: l" `
(heatbugList,
( [ W, P0 R2 H; Z& X" z0 j8 a new FCallImpl (this, proto, sel,
* B2 k. Q7 V) S4 s: p% | new FArgumentsImpl (this, sel)));
& F# V) ]) X \ } catch (Exception e) {6 W8 m' r- s- p: P
e.printStackTrace (System.err);
6 [( Y1 g2 N: V/ |6 j }
# b& u$ u0 P, K S- N$ R
$ h" W- c' ]! w1 c/ J7 F syncUpdateOrder ();" w$ z* O s4 a* `
: D) S B2 q! B- H! b; B
try {2 c: T: F3 \( @$ u. y6 o* }
modelActions.createActionTo$message # o9 a$ j' M$ d- P4 ?' _: ^% w
(heat, new Selector (heat.getClass (), "updateLattice", false));
: b5 \. r$ \. J" e* v } catch (Exception e) {* x7 q* B: ^! a2 e1 H2 h! F
System.err.println("Exception updateLattice: " + e.getMessage ());
7 I" q# M$ _( d3 t: o1 M- t7 c6 s6 P }
8 ?/ f# u4 j6 q. F1 m' c* @! U1 r# q( M 7 I% A1 m+ j/ i* \0 x `
// Then we create a schedule that executes the
) y; }' F1 P6 J& N; x8 Z // modelActions. modelActions is an ActionGroup, by itself it9 [( h* K& M1 b. J( d/ C6 b4 ~
// has no notion of time. In order to have it executed in4 x, D9 w2 W: j! n7 x
// time, we create a Schedule that says to use the# q/ @$ W! `3 Q+ }# c2 _ A$ C- e
// modelActions ActionGroup at particular times. This* s; d. f( N N2 |: S- B6 m
// schedule has a repeat interval of 1, it will loop every" @. G: `% L$ y, K* z
// time step. The action is executed at time 0 relative to
8 o$ L$ n( | l* [ // the beginning of the loop.
5 F6 m N! p$ ?: q8 J; d7 C4 f @9 n2 @
// This is a simple schedule, with only one action that is7 r; \4 O% U1 K z5 j
// just repeated every time. See jmousetrap for more
7 x) e& N# `8 @) d5 O0 l- [ // complicated schedules.
* T; K" H/ x* C) U; \6 v5 J- o* z
+ ~( a. \' b h4 X modelSchedule = new ScheduleImpl (getZone (), 1);
9 ?( O0 D) v, @* S modelSchedule.at$createAction (0, modelActions);
q; ~8 A$ u; O8 ~8 `
! O* l+ k" I" Z H% m, z return this;; R5 b9 m* }4 s
} |