HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& Q" j, ^3 k( b0 P: [6 ~% ?& m- h0 [
public Object buildActions () {% }. g+ j$ A& W0 F' J
super.buildActions();
2 m, w G, c. [; D$ W
) z, m7 R9 |" z( |4 a [7 X // Create the list of simulation actions. We put these in
9 [3 ?: d# t* \# P9 b/ h ]3 r // an action group, because we want these actions to be# |; n) I& A# W, M
// executed in a specific order, but these steps should
7 I K6 ^$ A7 y: J // take no (simulated) time. The M(foo) means "The message
J! S% d% N- m9 ^! a# c# c3 p // called <foo>". You can send a message To a particular( J9 _' u% a k, a2 I
// object, or ForEach object in a collection.3 }% ^3 {& Q* f& ]8 o1 V9 W8 V
) E2 {0 R% Y7 m7 G
// Note we update the heatspace in two phases: first run
( ~$ v5 \: ]* A& P7 n // diffusion, then run "updateWorld" to actually enact the
7 z4 y f) U; `4 P7 z& s // changes the heatbugs have made. The ordering here is
% q6 |- d0 O( u% \5 Q3 ^$ X // significant!
# B. W; E% c/ [6 z. i 7 B v4 ]0 s% S: _# E& s; v l/ d
// Note also, that with the additional( \7 L% {& \+ S" u/ J; m/ q
// `randomizeHeatbugUpdateOrder' Boolean flag we can
. [( d7 I8 M, G8 E; O0 O. ^* N // randomize the order in which the bugs actually run* j. t; J! H" b/ |3 k1 H9 r
// their step rule. This has the effect of removing any
9 z5 S% i, R; W // systematic bias in the iteration throught the heatbug4 h# I( F& l/ |
// list from timestep to timestep
1 k- B' E1 S: ]! r - C2 \, {! b, P9 ~, u
// By default, all `createActionForEach' modelActions have
" n! D4 s/ t# o& Q5 | // a default order of `Sequential', which means that the( q) M. T5 O( d% C
// order of iteration through the `heatbugList' will be
* {- [! k4 r0 j$ P0 X4 j+ F // identical (assuming the list order is not changed
$ O* O$ N4 ?# Q5 ^$ R; b6 h // indirectly by some other process).
% ?- A" s+ S7 e
. E" u) `3 t9 `) ~ modelActions = new ActionGroupImpl (getZone ());9 B0 k& D' Z! h4 e/ E2 c
# E2 w$ }4 i, A' u- n: R, W" v try {
; j# I: n8 ]' |& e3 ~6 Z; U modelActions.createActionTo$message0 k* v+ W1 e ?9 ?2 P8 K+ W) O, x0 _
(heat, new Selector (heat.getClass (), "stepRule", false));5 C# B6 l- k2 R* U4 }4 c( a, z/ V
} catch (Exception e) {2 `" p) W5 y9 F0 [5 h. @
System.err.println ("Exception stepRule: " + e.getMessage ());
0 c6 Z* Q) B+ Y: C }
& N0 k; i0 B5 G, \
' ]8 L7 G* p0 z: B+ q try {9 T' ^, l* O4 ^7 {8 B, b9 e: H
Heatbug proto = (Heatbug) heatbugList.get (0);, M+ U# P* L% b& x9 ~6 S9 d w
Selector sel = % [9 t- M: n. r. O4 a& M+ }" {1 X
new Selector (proto.getClass (), "heatbugStep", false);
' K Q' S; | z9 u actionForEach =
9 u: a$ @9 H* G! n* s modelActions.createFActionForEachHomogeneous$call7 q q) P c7 e% [' Z7 s
(heatbugList,
3 z4 J6 }, \! L+ \ new FCallImpl (this, proto, sel,
M4 L" C3 x3 s) U9 } new FArgumentsImpl (this, sel)));
' M" B6 R# F0 [8 H, {( l6 N } catch (Exception e) {
, y$ P+ }. ~& f4 f' F e.printStackTrace (System.err);9 k6 D. L$ N; Y& s& ^3 J
}* n4 j; F5 M0 F0 w) L5 K
9 j' `7 t6 k5 e- d' D" M. i4 t4 W9 R1 n
syncUpdateOrder ();, _; V: n& R: h y/ F& z! h* ~' O
+ y2 P! q J* H: v) `; P* c
try {6 Z" V$ F4 s% C( P+ W
modelActions.createActionTo$message
9 t1 [: N$ r- Z8 q# Q: o* \ (heat, new Selector (heat.getClass (), "updateLattice", false));
( j% ?$ U1 _+ ?2 L) y } catch (Exception e) {
1 G8 N! F$ T7 u6 y( S. y System.err.println("Exception updateLattice: " + e.getMessage ());- G. u' R2 a; _% p" y
}. e! X2 S! X. D4 x# h- {8 x
1 v, c# B- H8 D- H/ w: ^ // Then we create a schedule that executes the
" U. U, N1 p) R u& O$ D0 }0 v // modelActions. modelActions is an ActionGroup, by itself it% ]( i( D* V5 o6 d0 Y7 T( m
// has no notion of time. In order to have it executed in
) b' B7 o# R- A; ^# O // time, we create a Schedule that says to use the
; W; R6 T/ P" z8 C // modelActions ActionGroup at particular times. This. Q/ J" Q6 q2 H" Z5 y; F: ^( {
// schedule has a repeat interval of 1, it will loop every
3 M3 h) z: u5 Z% M2 Y // time step. The action is executed at time 0 relative to
O/ `$ l. }3 m- f4 q; K // the beginning of the loop.
. R3 H2 n) X0 V3 B8 a$ a" C4 l- j' |: `+ Z) b) K
// This is a simple schedule, with only one action that is. W6 _* [, X! r8 v2 L
// just repeated every time. See jmousetrap for more: \' ~6 `' c( c
// complicated schedules.
8 m# W& h, w! K - \$ t8 C, H% Q8 o5 G6 O1 f
modelSchedule = new ScheduleImpl (getZone (), 1);
1 {, ]4 J$ m1 b0 C: U modelSchedule.at$createAction (0, modelActions);
0 r1 K% {$ w1 E' A
$ l5 C" P. z* l& M7 e- H return this;/ y* N6 z, A8 r; y# A
} |