HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# g7 H! f: \0 s- @& I9 g- W9 G2 c5 D
2 y+ u6 k* H/ {9 c public Object buildActions () {# c' _7 |( O, L2 r/ _! n
super.buildActions();7 ]0 L2 ^3 ?$ |/ G9 y; G5 q3 d8 G
, K | |/ D. J ^% |# ^1 P
// Create the list of simulation actions. We put these in. M7 K3 ?' ~3 L$ J& C, A+ _" p
// an action group, because we want these actions to be
7 |) ]) A% g6 @' H F5 K1 o // executed in a specific order, but these steps should
# @) N0 Z3 m4 i% N! P6 p% s // take no (simulated) time. The M(foo) means "The message
! `; L9 H4 R! w3 R( e6 S, A# y // called <foo>". You can send a message To a particular1 D0 \! o O2 n
// object, or ForEach object in a collection.3 `5 g8 _0 u+ X+ I' u6 p
! g' d6 g' w& M+ J7 W, H // Note we update the heatspace in two phases: first run
: v5 \# h, E4 S // diffusion, then run "updateWorld" to actually enact the6 l: J7 b) O) d
// changes the heatbugs have made. The ordering here is' d, S! R8 \3 f! M4 O/ F
// significant!
( [" g7 O9 z* J. e6 H; G& H+ s% C
7 _ C3 w2 K$ `$ A // Note also, that with the additional
8 f/ b5 e! @0 B/ {% C9 d/ Z // `randomizeHeatbugUpdateOrder' Boolean flag we can
; F8 D% N/ I$ {5 D, Z/ @. n! p9 D // randomize the order in which the bugs actually run/ f0 x: o, {- c9 o/ `# y
// their step rule. This has the effect of removing any
* c, ]- Y. t% E- I' l' k // systematic bias in the iteration throught the heatbug0 Q+ j. K9 m2 a+ h- c8 T7 g
// list from timestep to timestep. e4 r* a4 h2 g" `7 k+ c) D& q, o% l
: q* c$ H& I) }0 P
// By default, all `createActionForEach' modelActions have
# {8 e8 L2 S8 j; j // a default order of `Sequential', which means that the, W: ~2 Q/ z2 Y9 E& h
// order of iteration through the `heatbugList' will be
0 A3 ]$ g3 G# A0 j: Z // identical (assuming the list order is not changed
, _9 v% `9 {; y* x; h // indirectly by some other process).
3 P& _8 l ]' Q4 o. D- Q5 k7 O9 M 1 Z8 U; S4 x% l% e( |2 X
modelActions = new ActionGroupImpl (getZone ());+ h2 d8 p7 W& k- x0 F
# U) @: U" y5 A% r) y
try {
6 M1 y: y* Z) Z: l" @ modelActions.createActionTo$message4 A- y8 M s8 Q& o
(heat, new Selector (heat.getClass (), "stepRule", false));
6 I" n1 s" |4 b$ W5 V* p } catch (Exception e) {9 ?! v1 {! N/ |" R/ f
System.err.println ("Exception stepRule: " + e.getMessage ());" i. h* n+ J5 i( O: R% V
}
9 b1 o; Q+ i$ Z8 }# s- Q- q1 L, s1 v+ R0 P, I" \& [0 h
try {9 ]) B) ?/ @3 e6 E7 s
Heatbug proto = (Heatbug) heatbugList.get (0);
7 C( [3 _/ w- K* m* T0 k$ g/ C) w Selector sel = 2 X" y& c! L3 s1 w0 ~; \
new Selector (proto.getClass (), "heatbugStep", false);
^# G& c8 `# O actionForEach =% C c7 m8 C- h4 n: }( ]
modelActions.createFActionForEachHomogeneous$call% V F) {# @7 I8 ?
(heatbugList,! [+ b/ O, J% G# Z# T h) ]# W" V
new FCallImpl (this, proto, sel,
2 c0 q( e, B; Y new FArgumentsImpl (this, sel)));5 n5 W# Y0 @ \0 Y& L
} catch (Exception e) {
' ^2 F& q2 }& s& ~; x$ z) g e.printStackTrace (System.err);
& u6 x. f. ]3 H! ]( o, D m }
6 @6 @( X) i, M: e, a ^
8 q2 \7 c* G P t& O5 B syncUpdateOrder ();$ z7 }1 c5 F6 v7 `/ Z
6 g) ~+ B! E( _ try {
2 m0 ^ y& x- i! c) k; D modelActions.createActionTo$message
1 E# D& S3 p, l! h* p7 S5 V! R5 j (heat, new Selector (heat.getClass (), "updateLattice", false));0 {# ~$ O$ [7 F" x, @/ e" v
} catch (Exception e) {' T) m, u8 i1 O1 L
System.err.println("Exception updateLattice: " + e.getMessage ());6 |4 v. @3 T" a% V0 X. r
}8 e+ L b- l$ P- U$ \
; ]& s# \' R# T* I/ [ // Then we create a schedule that executes the; @0 E+ d! v& B- j3 r
// modelActions. modelActions is an ActionGroup, by itself it9 k/ k7 c; u! S" B0 Y$ I3 \/ P
// has no notion of time. In order to have it executed in
9 B$ `# ?2 ?$ A' y" R6 w. i- g // time, we create a Schedule that says to use the
) ?- F' A8 u! ?0 J' W // modelActions ActionGroup at particular times. This
7 s! W+ [. |- H# T; M% n: m // schedule has a repeat interval of 1, it will loop every: j4 I2 [5 r6 F0 b( z; P
// time step. The action is executed at time 0 relative to$ z! }" ]2 v! o& t
// the beginning of the loop.) t' K9 X4 j' m4 c- d
- ?7 `* l- Z3 o
// This is a simple schedule, with only one action that is( _4 R$ x% ]! V6 P7 t9 ]" x% {
// just repeated every time. See jmousetrap for more2 M: E6 ^, n9 o
// complicated schedules./ y# a' k9 _0 E% }2 V1 j
: y! L. ^/ h/ F& q
modelSchedule = new ScheduleImpl (getZone (), 1);
7 U1 D4 I8 J' O modelSchedule.at$createAction (0, modelActions);
) k! S! Q- P1 V0 X$ X1 g! m* z
) B/ v/ e7 B' M: P( z return this;5 [$ m7 L9 ~: t6 J J5 L2 i ~
} |