HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 C0 M3 P: J# T# m1 z: a) M% [# g$ C- h+ G
public Object buildActions () {% J+ B+ _6 h- B+ o( x
super.buildActions();: p8 H: ?( r8 a2 g4 D, S
* {+ s, G' D8 | // Create the list of simulation actions. We put these in2 j1 c+ L( Z) g2 H
// an action group, because we want these actions to be
) t, ^' _, e, B' _4 \ // executed in a specific order, but these steps should
- D6 G( X$ c' c7 S) E // take no (simulated) time. The M(foo) means "The message: e: O& r( n4 ~" z
// called <foo>". You can send a message To a particular& Y% a* n" G! s8 T. b' \
// object, or ForEach object in a collection.
' T$ m1 B2 @. x/ Y6 t" x( v( b - {* S! X# y3 g* L3 d* `
// Note we update the heatspace in two phases: first run
7 k/ E+ `7 k$ T // diffusion, then run "updateWorld" to actually enact the
7 L" H# h+ _1 ]3 F: @5 B // changes the heatbugs have made. The ordering here is
: U6 R( }3 ]6 Y9 d8 A // significant!
9 ?! l# O+ i" q. e2 a" y% t ! r( s! S& a+ r* w+ V+ q
// Note also, that with the additional
3 T; I" M- L5 C- t' _) p7 {2 J3 z // `randomizeHeatbugUpdateOrder' Boolean flag we can$ f: Q" Z: z7 f! o# D
// randomize the order in which the bugs actually run
5 d% R$ b: k. W* Z // their step rule. This has the effect of removing any) d, I. q; O( s9 z* a/ h5 y
// systematic bias in the iteration throught the heatbug$ w, Q% C/ b, _
// list from timestep to timestep
3 `2 ]; v8 X9 C- ]. Q- O
4 d# H2 X8 O( ]2 | // By default, all `createActionForEach' modelActions have
% ~- {1 K* y8 K# H4 w# S // a default order of `Sequential', which means that the
& {/ X1 X! o) [9 [. ] // order of iteration through the `heatbugList' will be& C0 f! L& n, l; T+ q
// identical (assuming the list order is not changed2 W8 O! [, _! Z; F
// indirectly by some other process).! Q4 n& o( P1 V& N9 r& I# o
" Q& X7 N+ [/ Y: p8 F7 |8 e- W. @ modelActions = new ActionGroupImpl (getZone ());, h3 I* T5 D! e7 R
" z& ?2 K; ^: t2 S" G* o3 D try {
}5 r3 X4 K1 o6 d2 z9 E t modelActions.createActionTo$message' U3 l% x% S" ?; t
(heat, new Selector (heat.getClass (), "stepRule", false));
# p7 Y S- W) E6 T0 |4 P) r } catch (Exception e) {
' k# j( M) r# l4 \( R+ g' X. ]) a3 I System.err.println ("Exception stepRule: " + e.getMessage ());. b6 s! h( p. ]& l
}0 e. N2 u/ E* x# `! J9 o
% b0 m+ A' p2 p9 R; X- S0 w e
try {
8 G( h1 i ^0 V4 Y Heatbug proto = (Heatbug) heatbugList.get (0);$ A9 S$ Z2 K3 _
Selector sel =
: `* I. G3 k5 y new Selector (proto.getClass (), "heatbugStep", false);) w, _/ h3 U* g8 c6 U
actionForEach =
% F6 i1 Q8 Y) H! S+ U0 i modelActions.createFActionForEachHomogeneous$call2 ]0 M& W/ m$ E/ H' {0 Z6 \ z1 Q
(heatbugList,
: b: q+ X7 }" k, \3 u new FCallImpl (this, proto, sel,$ n8 p/ u1 j6 [* F
new FArgumentsImpl (this, sel)));7 t- p8 ?+ }: E: ^2 f h
} catch (Exception e) {2 j" W7 c; n' L3 @
e.printStackTrace (System.err);
# q" z7 u) [8 N/ K5 o }
' v; m: i0 }& }5 b
& B+ d! ]' e6 s2 W- ^ ?# h5 J syncUpdateOrder ();7 [5 i* ]2 ]& v) ^" o
6 Y$ v9 Z- T9 W
try {
/ _9 H3 A! Z0 t! o modelActions.createActionTo$message
8 h% K6 U% l9 c! n (heat, new Selector (heat.getClass (), "updateLattice", false)); z" `, H& z1 p' {2 u0 N% n- v3 |, }
} catch (Exception e) {
3 G' G; m% i0 z9 I8 k4 z System.err.println("Exception updateLattice: " + e.getMessage ());% h* R# A! Q* A1 u& d8 a2 S, m
}. v$ \. Z, n [0 b
, h+ v/ F% @- n
// Then we create a schedule that executes the
" @) A: c6 w' z4 y$ N // modelActions. modelActions is an ActionGroup, by itself it& ?. {, E5 @2 |% L" O
// has no notion of time. In order to have it executed in
; C2 k$ l* i6 @/ S% c. Y4 S6 {: O // time, we create a Schedule that says to use the1 T) I, P" w. X3 C- j8 q) p
// modelActions ActionGroup at particular times. This
" Y% `8 t% d# { T+ u4 m+ ~ // schedule has a repeat interval of 1, it will loop every! V1 f" x" [% L( z- r6 c* T/ @
// time step. The action is executed at time 0 relative to
$ `0 ^" Y5 k. X // the beginning of the loop.* H! `3 K5 A3 w: b: e& g7 z8 P
& P/ b$ P+ _1 j0 { // This is a simple schedule, with only one action that is
' }- l; n m! B1 ]2 c/ `- a // just repeated every time. See jmousetrap for more
+ J2 p; G4 i% u: P# x2 Z // complicated schedules.
0 a4 S# c! v6 {9 p% s+ f4 ?+ u
. j n% P3 U7 D+ f- M/ G0 i [. j4 | modelSchedule = new ScheduleImpl (getZone (), 1);
" w: e. X3 @, ^2 A4 B, [% N modelSchedule.at$createAction (0, modelActions);
7 c( S% f$ _. U# ^/ s4 b G" ~
0 b4 u3 y0 S) p. j7 s9 x8 S return this;4 k( p9 p% B$ ]- U. \5 F) M# a
} |