HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 t9 u; ~; v- ~! |0 S: e4 N
5 N6 h% h! J/ j public Object buildActions () {
2 c7 l1 W6 t/ G5 t2 s* E- @ super.buildActions();) C2 I1 O- l4 B' z8 h4 P( q
+ W0 E0 i( s6 D5 L
// Create the list of simulation actions. We put these in: Z2 v ^0 D* Z5 x
// an action group, because we want these actions to be
) b; \8 L- h6 c1 ?$ E/ R // executed in a specific order, but these steps should
, k o: v/ J/ T+ N2 w4 N. j // take no (simulated) time. The M(foo) means "The message
. `% g# L% c9 N* Y% M% ~- v* p7 N! o // called <foo>". You can send a message To a particular0 J# V2 k( d r$ w# g
// object, or ForEach object in a collection.
8 V' X+ o3 y* k0 F / l6 q0 c5 H+ C5 U( J
// Note we update the heatspace in two phases: first run& e1 [& E8 ]! M1 Q) ^" B8 O1 N, [
// diffusion, then run "updateWorld" to actually enact the
- \- z, Q# {$ L* p# S( Z. q! s1 g# V // changes the heatbugs have made. The ordering here is
* l, Z; _' p& | h* ^/ @4 v // significant!
: a7 q! F, | _% _ ( j/ n: }3 b6 _3 ]
// Note also, that with the additional4 J0 L5 U w7 G( T9 n
// `randomizeHeatbugUpdateOrder' Boolean flag we can7 Q$ P4 C3 m/ R% l" h
// randomize the order in which the bugs actually run: g7 f) t1 F1 Q; R
// their step rule. This has the effect of removing any3 g7 c: a% K3 `0 y7 o) n8 b
// systematic bias in the iteration throught the heatbug; q' E, N8 B3 w/ l1 V9 Q1 Y
// list from timestep to timestep# ?1 ?# r9 k: m$ m
& \; ^0 _4 a' s4 U3 @$ F$ T // By default, all `createActionForEach' modelActions have
7 l% H5 l4 y( l4 ?$ d // a default order of `Sequential', which means that the
( D& P3 Z: \5 m2 g* e# m // order of iteration through the `heatbugList' will be1 W' U1 j v# y( N: V& _
// identical (assuming the list order is not changed* D2 d; {, k u& G& D+ |) x
// indirectly by some other process). a4 J, K8 l& R6 l J# u
: D+ Q% U( ]* a2 ^. |
modelActions = new ActionGroupImpl (getZone ());
8 |+ y( t' O5 o d1 W% S( Y# n2 o# r( W9 k) s z. `
try {3 I9 p( P" }- Z9 u9 s7 X; V
modelActions.createActionTo$message
7 }. M9 r$ i6 ~+ `1 a$ J; S (heat, new Selector (heat.getClass (), "stepRule", false));
0 p( X2 p. L0 A" e& ]! w! s } catch (Exception e) {, v5 f X# s# m$ T, N; r0 W
System.err.println ("Exception stepRule: " + e.getMessage ());0 z# g2 b& w5 S2 K
}
) l N5 Q0 G+ E( }$ t/ A6 d* g, d: u
try {( E' n Q1 ]$ N0 M
Heatbug proto = (Heatbug) heatbugList.get (0);1 G/ [1 j6 u4 a0 |# a, a
Selector sel = ( n( E' J: U0 p& ?
new Selector (proto.getClass (), "heatbugStep", false);: ~1 I5 d* _0 B. M8 y+ s) k
actionForEach =
6 g' Q2 s! k3 |( f9 l modelActions.createFActionForEachHomogeneous$call3 [+ O/ `. I z+ m/ [: x# ^
(heatbugList,- R! U; x0 O! T- |6 g, p
new FCallImpl (this, proto, sel,
; g% L7 E* u2 [, q3 _0 s new FArgumentsImpl (this, sel)));+ t3 G1 Q8 a, S6 f& k4 U
} catch (Exception e) {2 O9 G: I% n. _
e.printStackTrace (System.err);: x" K' R& ~! ^/ \, l
}; ?' ~& a# w: H$ f: K' ^# i
' g' V( a: D* z" }- f7 ~" e syncUpdateOrder ();5 K) S$ F: ~. }0 z
, k1 c6 c( f6 O) `% p2 M2 z
try {
* K. x6 C- G. Z4 w9 a% P+ a0 @9 o modelActions.createActionTo$message
8 k% N! @2 d( e1 ^9 c4 ~ ~ (heat, new Selector (heat.getClass (), "updateLattice", false));
! q+ L* S4 B; _ } catch (Exception e) {8 N1 E, E& c3 l3 |! h) A2 t U# s
System.err.println("Exception updateLattice: " + e.getMessage ());& M) H% o1 @" W
}! j# F: s) s7 K: i& D! D: ?
: ]+ U) f( \$ G8 T) @3 Y
// Then we create a schedule that executes the
$ F$ g. A# U& u# o3 C( g; e1 s9 e // modelActions. modelActions is an ActionGroup, by itself it
4 L% G8 U0 q! Q A // has no notion of time. In order to have it executed in, ^/ n3 k: P7 f9 T
// time, we create a Schedule that says to use the3 `# ?7 C; O0 |- F# _% J# K
// modelActions ActionGroup at particular times. This
7 [( v! l5 k5 U! @, l // schedule has a repeat interval of 1, it will loop every
- r" ]/ [3 ~' B; H# B9 E5 O // time step. The action is executed at time 0 relative to: z* S2 k5 q5 Z# s
// the beginning of the loop.
& V' j- t) O: p8 J2 S! ^
" V5 B1 ]' t% J" c' a // This is a simple schedule, with only one action that is
0 X. S+ F; M7 C3 T- b // just repeated every time. See jmousetrap for more
! `9 J4 z1 h1 _! d2 n // complicated schedules.4 i* ^- B1 L) U6 H4 u, d# [
7 \) @* ?5 ]* D+ a, Z4 Z modelSchedule = new ScheduleImpl (getZone (), 1);- V" z& m/ e/ @* O+ d+ `6 ~" j
modelSchedule.at$createAction (0, modelActions);
H( g) T0 h# D" v& Z
0 @( o, r9 O" }3 H return this;
& w5 g* m! K4 U } |