HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' i1 U) F. N4 m ?7 L2 L# ?7 r g- v6 X( f2 g& c. _7 k
public Object buildActions () {, L+ M, v4 d5 I$ Z" _; S
super.buildActions();( O, C$ m& z( j, c/ W
8 |7 v. u9 e- A // Create the list of simulation actions. We put these in7 v9 Y3 ]; @9 Z* X4 V' E3 v: ^
// an action group, because we want these actions to be' X+ N) V* K: F* c4 T8 c
// executed in a specific order, but these steps should
0 A4 ]( N5 _" V: c% ^ // take no (simulated) time. The M(foo) means "The message; Y3 ^0 ~; A6 R5 i) {
// called <foo>". You can send a message To a particular
P) q, r7 d1 z6 e // object, or ForEach object in a collection.
: a% O6 v: h" E. R 9 `( N' X E3 X8 H8 E: ]# x6 n- c: Y
// Note we update the heatspace in two phases: first run+ o$ b& I; l( G' z0 ]4 i+ ~
// diffusion, then run "updateWorld" to actually enact the5 N% o& r! J9 n0 M+ D) A, B$ ? ?
// changes the heatbugs have made. The ordering here is
6 J7 b/ T) \7 [8 }' @ // significant!
$ |- Y% ?% M( O3 _& d0 z7 z0 `% t$ `
' F+ g G4 q. B. c+ p/ Y. | // Note also, that with the additional
4 p8 ?; \3 ?% n3 G( t x // `randomizeHeatbugUpdateOrder' Boolean flag we can
! F8 F6 H; R$ c // randomize the order in which the bugs actually run
. Q: W5 F2 W" i# p y7 s // their step rule. This has the effect of removing any3 Q9 T' I4 b) W% }9 \
// systematic bias in the iteration throught the heatbug
. O4 E A6 g# s, Y // list from timestep to timestep
) U e2 ?% M8 {8 a4 J' H
5 w0 T9 T" C3 ]4 ~9 b/ r' Q // By default, all `createActionForEach' modelActions have+ @6 {' x9 ?/ z s! J2 R2 z% u
// a default order of `Sequential', which means that the
/ U# _" ~! F/ B8 F6 @ // order of iteration through the `heatbugList' will be
6 w8 x G) F& `/ ~8 P- {6 C" I // identical (assuming the list order is not changed
8 l8 J/ S; v1 U+ U6 V7 I2 I // indirectly by some other process).
/ A. r3 w6 j; y6 P3 W8 p& l9 H $ [2 L5 p/ m4 x: ~2 S4 P
modelActions = new ActionGroupImpl (getZone ());
) {9 u: {+ |5 U# ]/ _- T( r2 w. |" Q, n! U7 v6 y- R8 @' ?
try {2 ]1 L7 C) h ^& p
modelActions.createActionTo$message
: q7 J7 v3 F* P0 {8 M (heat, new Selector (heat.getClass (), "stepRule", false));& J$ y" H8 O7 V8 Q' `
} catch (Exception e) {- ]% f+ H% ?$ t0 K4 k9 M
System.err.println ("Exception stepRule: " + e.getMessage ());1 Y4 t1 T2 L/ Z9 Z; M( ~, [$ M
}
) a" m7 m: {4 S" F, `
- V* A3 s( g7 V8 \8 Z8 h* z try {) D$ u7 b$ f& K: z5 }
Heatbug proto = (Heatbug) heatbugList.get (0);* V2 [0 ~3 x. u/ i% B
Selector sel = 2 ~" q+ M% b9 g8 R1 l4 B
new Selector (proto.getClass (), "heatbugStep", false);5 `* T# Z! C8 l# ?* r) K# d7 A) J
actionForEach =
/ o& Q+ S! `, d5 o% J modelActions.createFActionForEachHomogeneous$call. w; B7 g/ s9 B9 ^
(heatbugList,. Q3 [! N# _, W; _" f
new FCallImpl (this, proto, sel,
8 b9 H3 j( T' @# k8 i" [7 Z new FArgumentsImpl (this, sel)));0 y% n; j) c8 Y8 O0 { b
} catch (Exception e) {
; O2 L" ~5 ?6 L; V: l e.printStackTrace (System.err);
& T5 ]* \ s$ p2 V( x) w }
, C/ e8 `; e* H8 ?6 ^+ Y; v$ g 2 H9 T$ ^- ?2 F/ A i% U$ b
syncUpdateOrder ();
s0 E( R r# s) X7 I; X
8 O0 D0 o$ \. G2 K& p try {. K: p: J& R- g9 C+ o+ u8 V
modelActions.createActionTo$message 9 W( m: f5 M* A- z& W/ }# I
(heat, new Selector (heat.getClass (), "updateLattice", false));
% u b: r8 \5 B0 e$ Z# Q; F } catch (Exception e) {& C& b' z, V4 C z& \. ~5 r4 W- I+ T
System.err.println("Exception updateLattice: " + e.getMessage ());
& O# k$ U) {% J2 j2 \ }
6 G H8 f0 ]/ P) U$ u$ n c
" d% `0 x7 ~! s, ~! g // Then we create a schedule that executes the! _/ _# `2 A7 M/ J( ^! V. F8 L
// modelActions. modelActions is an ActionGroup, by itself it* w5 U5 y* D* P6 ?
// has no notion of time. In order to have it executed in; ?6 [7 f) [" V4 S; u) Q
// time, we create a Schedule that says to use the. G: N2 l: g5 T- G% d
// modelActions ActionGroup at particular times. This/ D: Y s E, u5 x% ~9 O
// schedule has a repeat interval of 1, it will loop every
$ Q/ ?6 u& Y# d // time step. The action is executed at time 0 relative to
$ T! O) u) L }7 c // the beginning of the loop.* J: w6 j6 o4 v) x
8 W4 ~- U, Y0 B' e& P // This is a simple schedule, with only one action that is
+ `. j/ T2 j. X' z1 v c // just repeated every time. See jmousetrap for more
5 V, W) O+ o0 T8 s( v/ l7 _ // complicated schedules.5 y1 h8 Z& ]8 B, q
! r5 E1 G# I) C: Z& J
modelSchedule = new ScheduleImpl (getZone (), 1);* U; {) O7 u" U- x+ C# J, Z
modelSchedule.at$createAction (0, modelActions);
. z" V4 {" ]# m3 M& h/ E
9 |; o B/ ]# J return this;& f m: ?) [7 @4 _
} |