HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 W: s2 ^0 m8 n, c4 C
# j1 ^6 [+ X5 q( o" W! g( `' H
public Object buildActions () {6 G% {# K1 ~# T4 o0 J; `/ J3 O
super.buildActions();
$ b/ A% I, n* \ ; f+ P- U ?! Y, J- i9 v7 X; i
// Create the list of simulation actions. We put these in: q, z# O @4 E0 ^) O2 p8 b7 g
// an action group, because we want these actions to be
6 E7 [/ D+ r+ N1 D1 U // executed in a specific order, but these steps should, m5 k/ m- l! |% b
// take no (simulated) time. The M(foo) means "The message g6 U7 H; W! H; V' E! G- z
// called <foo>". You can send a message To a particular& J/ |& p* g2 \3 \
// object, or ForEach object in a collection.# _- F$ E& t8 e: O- S8 @
# y- m1 t' g4 h8 r) F // Note we update the heatspace in two phases: first run# G1 ~4 d1 n8 Y4 m& i/ N! v
// diffusion, then run "updateWorld" to actually enact the) @( Z0 x4 |% s9 h& g/ i
// changes the heatbugs have made. The ordering here is
% q% R# X# P+ n, b; R5 E // significant!/ N' w0 r8 |# u+ J
$ V1 P# c! j S& R4 u/ `( z
// Note also, that with the additional1 k& w" o9 b) T. \" }+ j
// `randomizeHeatbugUpdateOrder' Boolean flag we can5 \) h( d! H5 G4 s
// randomize the order in which the bugs actually run$ h2 J8 Y- M" a I# a
// their step rule. This has the effect of removing any, m' C! ^( J! y% s
// systematic bias in the iteration throught the heatbug! H0 K; c0 h: V. w+ z
// list from timestep to timestep; p8 I w6 a4 c, z+ [7 J
# H, P$ @6 w2 t5 P // By default, all `createActionForEach' modelActions have4 x) u( m) {) g* ~6 F
// a default order of `Sequential', which means that the
- @+ n" H; X! C+ R( v; j! r2 f // order of iteration through the `heatbugList' will be
q3 s! J" [9 a* q+ H, X // identical (assuming the list order is not changed
" d) X1 U; L& F3 C$ q // indirectly by some other process).
% r3 `4 O8 |7 }6 }, S 7 G5 A- D; g. x
modelActions = new ActionGroupImpl (getZone ());9 Z: w3 `: M) Q& h b! l
0 F6 |8 R1 ]' h& Q7 j& ^4 m& w
try {
% o1 W6 j; B( P1 t9 F; y modelActions.createActionTo$message0 J7 T r* v" z4 v, A" @. v
(heat, new Selector (heat.getClass (), "stepRule", false));- Q y# J& E( `0 i6 ^
} catch (Exception e) {- h, C" u8 _2 n0 a
System.err.println ("Exception stepRule: " + e.getMessage ());
6 j& u* l+ S2 Z/ P q! s. y }
8 g( L& V) w" }; ^. i: t4 h2 s) G
, ]. c+ [( N1 U( S0 v6 |! C0 v try {: x5 E# A0 Q4 `% N
Heatbug proto = (Heatbug) heatbugList.get (0);+ K6 G+ a7 u. Q, P2 b, Y
Selector sel =
; e) w) h$ S4 q5 a* U4 r$ k- e new Selector (proto.getClass (), "heatbugStep", false);* y- m9 E; H/ ^+ h! T
actionForEach =1 {( c) |: N, Y; a
modelActions.createFActionForEachHomogeneous$call% O- v9 _- k" Q/ N' R3 d
(heatbugList,* w7 |* R6 b7 S- K
new FCallImpl (this, proto, sel,
& k4 ^9 U' Y, [8 X6 q4 F Z new FArgumentsImpl (this, sel)));& i; X" q- f: q+ ~! c
} catch (Exception e) {; i; D! e3 f$ ]1 \
e.printStackTrace (System.err);4 g/ |' X3 |- ^% d* H
}
% I1 G3 ]& N4 K. s: T+ } - h4 A$ `$ t8 ]5 Y: V! _9 S
syncUpdateOrder ();
9 f# {& F. n2 e
+ j6 C' c8 ]5 W7 E try {
. e; ^- x0 U+ [9 v$ x6 H modelActions.createActionTo$message 0 s& g& W# x$ U
(heat, new Selector (heat.getClass (), "updateLattice", false));% u- T8 y4 l) O+ F
} catch (Exception e) {& Z9 {2 |( d b, E: u1 n
System.err.println("Exception updateLattice: " + e.getMessage ());9 g6 b+ a' }) u. Y i
}
& E( t8 [6 X( o/ P3 W
" W1 y6 M% q+ v! }3 }- r // Then we create a schedule that executes the: @' u8 J" w* k$ q2 a
// modelActions. modelActions is an ActionGroup, by itself it
$ j# p# |- R) W0 Y7 u E' P // has no notion of time. In order to have it executed in
* E5 p. ?) S. v // time, we create a Schedule that says to use the. h J& K7 w( ^% K; Y
// modelActions ActionGroup at particular times. This
q5 C+ ^3 S( n( N // schedule has a repeat interval of 1, it will loop every
# x# O+ i0 Y- H* W6 Z5 ^; S; i // time step. The action is executed at time 0 relative to
$ R9 g/ _0 t7 H3 j // the beginning of the loop.9 `+ d$ I; q6 q6 {& R% c' W+ G
+ M" l' y% u# _! e$ y0 w/ t // This is a simple schedule, with only one action that is. E5 u( L5 B2 M2 m. f# R" _
// just repeated every time. See jmousetrap for more( e }& s8 j0 H }. ^
// complicated schedules.6 x; n! ~, x/ E0 y( f7 j
5 F2 Z- Y& h" b
modelSchedule = new ScheduleImpl (getZone (), 1);
" C) l- s( a, H' l- ~; v modelSchedule.at$createAction (0, modelActions);$ Z3 g T6 u0 w) Z( }( L
, C: \) d6 }9 a# h7 r. ^
return this;/ \! E& E2 X" Z! T# f7 w
} |