HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 ] L0 o! e( C7 j6 q
: [! e( P) s* a7 U" n, @! f public Object buildActions () {
, Z7 | X( ^6 z! X' T super.buildActions();: f1 f: Y0 F+ j w' F
* h% ?: y8 Z P( @ // Create the list of simulation actions. We put these in
: B7 p i0 e5 [9 b, {# w // an action group, because we want these actions to be& p+ I% j8 ?3 U6 I
// executed in a specific order, but these steps should$ c/ ^3 B( T( }+ f
// take no (simulated) time. The M(foo) means "The message4 v6 \9 \! O, l- v9 Y
// called <foo>". You can send a message To a particular
! ^. w0 U2 i/ k$ [% Z: R // object, or ForEach object in a collection.! Y$ V1 n+ [0 \1 h1 r& i
2 z$ e4 s7 I' _: j: R // Note we update the heatspace in two phases: first run
% R( |/ T# w S: b& v: C9 E! ^/ o // diffusion, then run "updateWorld" to actually enact the" Y* q2 n0 K* N: K* z
// changes the heatbugs have made. The ordering here is
7 i: N, `' S! y& W+ Z& E$ j // significant!1 e2 Q5 X6 r- F# K% n2 r/ J% h
! Q! J1 {5 ~1 T // Note also, that with the additional
3 K4 _8 @2 [. f1 `! m/ \ // `randomizeHeatbugUpdateOrder' Boolean flag we can: r+ H* W/ ]3 q0 |+ o
// randomize the order in which the bugs actually run a% W' @1 h8 q3 n5 X% t$ y
// their step rule. This has the effect of removing any/ t- G. h) W2 F0 y2 n+ P
// systematic bias in the iteration throught the heatbug. E' E2 U0 Y- y4 G, _$ v% Q
// list from timestep to timestep/ M0 f* W" `" p5 Z. }4 K5 G
' C8 A% y3 ^7 v( N ?8 u
// By default, all `createActionForEach' modelActions have8 A# r: }5 H' L. |
// a default order of `Sequential', which means that the8 o' `# q$ h6 K% X; s; U: a
// order of iteration through the `heatbugList' will be
, C8 ? ^5 L* z" E* z // identical (assuming the list order is not changed5 _) R7 H( Y6 ~
// indirectly by some other process).
4 ?; K( w- y- @1 _ y & q( L9 ^% x# e" J) ^2 h
modelActions = new ActionGroupImpl (getZone ());
t" x! S6 M8 S. U3 ^: W# a; K, }5 ^7 _. G+ }9 y0 m" o
try {6 D6 y7 @; B) @2 k6 {
modelActions.createActionTo$message
! \- L; e' m( Q' Q2 q. X (heat, new Selector (heat.getClass (), "stepRule", false));
. v. C/ a8 j, d% q0 |9 ~ \( H } catch (Exception e) {* G& N+ s' Q, A: u! s
System.err.println ("Exception stepRule: " + e.getMessage ());1 c6 \/ i' _5 t/ m
}
4 N, _2 u7 _* O, q! H4 K* U' S' q9 @/ ]% R v# ?- B
try {' D' W; m+ k) u2 Z, r" o3 ]$ Q" s
Heatbug proto = (Heatbug) heatbugList.get (0);
`7 P; M8 w4 }' z2 k3 Z5 c Selector sel =
0 p3 ~" \. N6 G new Selector (proto.getClass (), "heatbugStep", false);. U+ J" J: m4 P
actionForEach =
% p% c3 o7 p$ |; z* k, V modelActions.createFActionForEachHomogeneous$call. y, ^7 v; M2 ?2 e0 W+ v- c
(heatbugList,: v6 `1 S% f' m* Y5 v: \
new FCallImpl (this, proto, sel,
7 ~" `& W4 f& y( d2 H3 _" ~* @0 f new FArgumentsImpl (this, sel)));
) ?, N8 \- o4 q# G2 N } catch (Exception e) {
; _$ L& l5 T" ?( b e.printStackTrace (System.err);
8 @% G* E: P) X: P3 @( Z1 Q. o/ ? }
$ b# n b7 j# T6 p' z) k) k0 H7 W: x ( M/ e5 p; `0 P9 P( B
syncUpdateOrder ();" F1 ?& K: k! k) I k$ O
. ]* q" g% F/ G5 b4 N6 }. j+ I4 V$ X+ H
try {
5 `5 {- ~4 S1 I' C* ~: ` modelActions.createActionTo$message
) S6 q( q- f, w& R0 k (heat, new Selector (heat.getClass (), "updateLattice", false));) q B6 R, d: F5 x, O; R. V
} catch (Exception e) {) s8 M$ s( a5 Y. F7 u
System.err.println("Exception updateLattice: " + e.getMessage ());
* f6 v, l) C/ `) A4 a; K3 y" | }* \1 u H( g$ @3 r1 |
& v3 g, u0 x1 T; D$ v // Then we create a schedule that executes the
7 d. F* ]$ z" S3 y( J // modelActions. modelActions is an ActionGroup, by itself it
9 G6 U' q0 G, c1 g; ]/ [ X // has no notion of time. In order to have it executed in
) `8 ~/ p9 a1 Q- F. m // time, we create a Schedule that says to use the. K$ J% P7 r4 E ~
// modelActions ActionGroup at particular times. This
1 ^" h& b" K/ [0 ?% w2 A j // schedule has a repeat interval of 1, it will loop every
4 u9 S( a2 ~+ n // time step. The action is executed at time 0 relative to. u) ]/ g' A% K" V2 g8 I% z2 p
// the beginning of the loop.
, J7 s3 a0 o. c
' c. e O! I" B& j! C) H5 o* E. L // This is a simple schedule, with only one action that is
' U9 Q% l, @: t: z1 L // just repeated every time. See jmousetrap for more& ~2 L4 D( U4 t' {
// complicated schedules.$ I) X' w) N* e" k
9 Q/ p: E! s0 x, U5 \+ k! D
modelSchedule = new ScheduleImpl (getZone (), 1);+ `9 [' x# r) [4 J
modelSchedule.at$createAction (0, modelActions);
; b0 H7 _- h1 ~9 I* d
- Q- r8 w3 {) I! O return this;
0 {) |1 \2 S4 y. A5 h4 J# y y } |