HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- K! l" b- x" z% h+ y
( {( y; l3 ~- e7 A/ e' _2 ~ public Object buildActions () {
$ ?# C C5 q8 x y: p super.buildActions();) ]7 m p) ` C/ ]( f
1 U9 O6 U- z0 H' W
// Create the list of simulation actions. We put these in( ~( E. \% \7 j# ^! q, l& b* z1 Y
// an action group, because we want these actions to be
# I* I- h% o- k; @9 F+ h2 D/ l // executed in a specific order, but these steps should# C$ \: \# K6 j& }: J. D" \# T- u
// take no (simulated) time. The M(foo) means "The message
3 g1 D+ v* z1 X // called <foo>". You can send a message To a particular
. y0 J- S2 e% q- N$ _7 z" O4 w // object, or ForEach object in a collection.
# Y8 Y- A% s- d6 w9 {" N " X6 X9 D" V/ I9 b
// Note we update the heatspace in two phases: first run/ [6 ^& t5 p$ t% z, k! p( R$ D4 u
// diffusion, then run "updateWorld" to actually enact the
6 B3 j" M# g" `& B* l // changes the heatbugs have made. The ordering here is
9 U) o# b! r$ t% K$ \( y // significant!
3 I2 {8 O/ f+ E
7 }0 w8 E( k+ X" D0 j // Note also, that with the additional0 F! V ]0 @2 c: v1 J' k! ~
// `randomizeHeatbugUpdateOrder' Boolean flag we can
2 M7 }0 V Y/ J/ h9 e$ ` // randomize the order in which the bugs actually run# |; C( I+ E3 l+ J( g, e# B" h4 X9 g
// their step rule. This has the effect of removing any
2 N1 c* y) |9 ^& p1 l8 O* j+ d, U) V // systematic bias in the iteration throught the heatbug
1 ]. [/ b4 v$ y" p! ? x( P& s // list from timestep to timestep# e5 C0 P3 i1 j. ^
3 R% l) w5 Y- z) J2 Q3 t9 _
// By default, all `createActionForEach' modelActions have
! A3 q- y3 J! G, l4 ?7 D: D. b+ o // a default order of `Sequential', which means that the
& H3 w9 [+ w. W( f# X4 e // order of iteration through the `heatbugList' will be
" i( \) t1 K! d // identical (assuming the list order is not changed0 ` o5 H$ \# t
// indirectly by some other process).
! K: O0 }0 ?/ z& H. b) W 3 P5 A" N3 J6 Q) g1 o% _
modelActions = new ActionGroupImpl (getZone ());
2 x* l& r1 G9 }( }5 g' W, q- |- a" u3 M8 H( B4 c" ]
try {
0 d2 S6 E5 L8 T/ J$ p modelActions.createActionTo$message: B1 w# B% d( B* w! c2 a
(heat, new Selector (heat.getClass (), "stepRule", false));
% ]/ S8 I: c! \' \$ ~ } catch (Exception e) {; t; _$ C3 M: U, ~
System.err.println ("Exception stepRule: " + e.getMessage ());
, ^7 c5 O8 b' @# f }
$ ^$ ]" p* `" P; y3 s0 r# M
3 o' H5 T* o% m1 b2 r/ Z8 ? try {# y' S" a" G" Q$ R
Heatbug proto = (Heatbug) heatbugList.get (0);( Y8 g. r) | o! U3 ]2 u6 T5 J0 Y; U
Selector sel =
4 F X7 U5 m) O* z new Selector (proto.getClass (), "heatbugStep", false);% V! w6 E/ R" a4 e! M1 f; i
actionForEach =/ o* Z) B6 ?; q+ M6 t
modelActions.createFActionForEachHomogeneous$call
( b# h& a9 T6 ^0 n( h (heatbugList,6 `. @8 g7 x0 E. c/ g. {: C
new FCallImpl (this, proto, sel," {0 R% j$ s2 }' P7 L0 n
new FArgumentsImpl (this, sel)));, {4 j+ j% p8 a I: R" ]
} catch (Exception e) {2 W/ f0 U$ M$ T
e.printStackTrace (System.err);0 a- Y. v' f# v
}- O L( v+ f- c y3 s
! V0 S! R$ j: l5 Q syncUpdateOrder ();5 a5 i4 V2 i1 M6 n0 r
) M; S. }* A8 O: p& ^4 m try {& v# o6 E& [$ a' ~; w5 ~& n2 y* ~
modelActions.createActionTo$message - L6 z# {+ t- Y& c" Y( Z2 U
(heat, new Selector (heat.getClass (), "updateLattice", false));
; @6 g4 F7 U1 o Q W0 W } catch (Exception e) {
, [, ~' n/ R& I4 S# f. A9 s System.err.println("Exception updateLattice: " + e.getMessage ());0 j7 D2 L3 X5 K, @; \
}6 X$ \; V+ K) r9 z0 J4 f
0 L$ _1 g3 U2 K
// Then we create a schedule that executes the$ K' v% O, w) p- \+ D' \
// modelActions. modelActions is an ActionGroup, by itself it& F* }6 R- v5 r/ W3 b6 e
// has no notion of time. In order to have it executed in! [0 I; g2 H, x9 T) \
// time, we create a Schedule that says to use the
/ B8 @; ]( d3 b! T // modelActions ActionGroup at particular times. This: \) W: A4 ?2 k% J
// schedule has a repeat interval of 1, it will loop every
' W2 p, Q5 ^/ w- y8 |) x: g // time step. The action is executed at time 0 relative to7 k. m0 H; b* Z0 Y9 M6 d, L6 [
// the beginning of the loop.
* X9 P {2 ]' K( D0 g* Z0 [1 b+ C
3 S' L# d* S. a3 m+ ? // This is a simple schedule, with only one action that is
2 D) ?) n$ e; R$ V% N2 y1 L // just repeated every time. See jmousetrap for more8 F7 r" z1 q$ }" V
// complicated schedules.2 @/ Y' z" Z, x8 Y* X% ?% P
( Q9 L& Q% z# V& a5 K9 i6 s3 i modelSchedule = new ScheduleImpl (getZone (), 1);
5 b, O; `7 n( w/ i' N' o modelSchedule.at$createAction (0, modelActions);/ w X- N/ F- J0 ]/ `
: F! {: i+ |4 u# ~# s% ?, ]
return this;
2 N7 m1 N9 o1 j* g* Y/ F/ i' X } |