HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, r5 Z' x, S' x+ z
" S3 O9 g6 ]9 ?& s, O public Object buildActions () {+ g1 m# }. {# G6 d. P
super.buildActions();
) e, M( h) A% F5 `6 T/ m/ | $ f4 b$ H+ Q: H: F8 v* P
// Create the list of simulation actions. We put these in
0 F( Y' P; ~( W // an action group, because we want these actions to be
" }' e [; Q8 o) d" E& l Q1 W6 x // executed in a specific order, but these steps should$ r: m. k6 \2 I9 `$ Z- H
// take no (simulated) time. The M(foo) means "The message3 }( Y( @% L8 F9 b+ M2 C \( e
// called <foo>". You can send a message To a particular
! V3 U" @9 d* j8 D // object, or ForEach object in a collection.
# v) \) K9 A, _0 c/ j; D' A W2 m1 H7 U( z7 T' K
// Note we update the heatspace in two phases: first run
0 v ^0 j4 [9 k6 C" T // diffusion, then run "updateWorld" to actually enact the3 X: F% s" T# _) l
// changes the heatbugs have made. The ordering here is
) T% m( Y/ K" r0 ?1 v // significant!
0 V9 c1 b! j; S2 _) g2 K$ n 4 k4 c1 Z$ @% @
// Note also, that with the additional
! m( s8 D$ A1 c E+ k5 r // `randomizeHeatbugUpdateOrder' Boolean flag we can
0 v7 N2 K0 k5 w- E+ L' x // randomize the order in which the bugs actually run6 w2 e* {8 k$ ~/ ]+ k2 n3 c/ s
// their step rule. This has the effect of removing any
6 q5 h( l4 X6 w3 o+ h8 ? // systematic bias in the iteration throught the heatbug
% f, q8 S) y* J0 D6 F$ [! ^& m$ P, g. G // list from timestep to timestep4 S+ r& M9 H4 n4 U0 ]8 R0 Y+ C
& Y4 O! j# Q$ ?* p' b. N
// By default, all `createActionForEach' modelActions have
- a8 n3 X0 f' l' f$ B, Y) D5 [( A" J // a default order of `Sequential', which means that the) a1 |' ~% {) E- h& ~7 d
// order of iteration through the `heatbugList' will be
( T1 l: W$ q/ R8 b3 L, r' d- X // identical (assuming the list order is not changed
' A/ d# P8 g0 V8 e' ~ r // indirectly by some other process).7 N1 v3 k6 y, W* m6 l
6 S. n* e) q Z% g" U: A modelActions = new ActionGroupImpl (getZone ());
) N; S7 r2 K( K- {0 r" g* h9 d: s' O# u, b' ?, V/ p
try {
" J* t k( y: @" K6 W8 k modelActions.createActionTo$message7 ^5 K$ F" f; d1 w+ {
(heat, new Selector (heat.getClass (), "stepRule", false));& f9 k( {( v4 p4 \* `* n6 E, s
} catch (Exception e) {3 v" a% @, h) F
System.err.println ("Exception stepRule: " + e.getMessage ());
# G4 w- Z$ q5 _" n1 \5 W }
- h, I, b1 ^( c! L
* Y( p: o3 C% S9 E+ L: v try {! ?' S. H0 E3 N+ ~& u, ?
Heatbug proto = (Heatbug) heatbugList.get (0);
: @) T. ~. v3 x Selector sel = , T- m* l1 Q% Q+ w% c7 H0 i( N
new Selector (proto.getClass (), "heatbugStep", false);
( U u, r, ]) D$ X& X5 }- c actionForEach =
, H6 x; N( l- J7 l modelActions.createFActionForEachHomogeneous$call4 ]! t2 q1 Y4 X
(heatbugList,6 z) h; U9 o6 ^ R% G g
new FCallImpl (this, proto, sel,
' k; B- S2 y6 I' `: a# v new FArgumentsImpl (this, sel)));3 W. ~" o; e6 w+ y; x4 F ?2 u0 Q
} catch (Exception e) {- K i/ M% j l/ ]. u' V
e.printStackTrace (System.err);
4 j7 m- u. u& R/ W: x }1 ^8 W. a8 i( U
. o/ F& ]8 J7 H( [; O0 w9 l syncUpdateOrder ();% L$ i6 ]+ \% E; J+ Z* f: H& V1 U
: Q5 [+ P4 G/ ]* X try {) `( T% h+ l3 |1 p# G' l
modelActions.createActionTo$message ! D9 ?7 ^3 ` O
(heat, new Selector (heat.getClass (), "updateLattice", false));# T* O6 h9 G" [" x$ C
} catch (Exception e) {2 D8 g: ?. B: E, [; J
System.err.println("Exception updateLattice: " + e.getMessage ());
( F" V' M) j6 B5 l& F }
6 J9 O/ w5 `$ E
! V* o" n. p. g; Y$ \ // Then we create a schedule that executes the
! ?6 ?9 h; ]) R8 Y) Y' z // modelActions. modelActions is an ActionGroup, by itself it/ x2 h0 h1 Z7 w k3 o
// has no notion of time. In order to have it executed in
0 N1 X# }- q1 h" L: `* d5 h$ u4 i) l // time, we create a Schedule that says to use the
+ r l, ~) ?# y. m, \5 s% ] // modelActions ActionGroup at particular times. This# Y7 h% ^4 [" J$ Z- g9 \5 \
// schedule has a repeat interval of 1, it will loop every
h, I d5 B6 n1 M8 o // time step. The action is executed at time 0 relative to* u3 _+ _ I' _/ @2 I H
// the beginning of the loop.2 c% B" ]) P3 Z3 |2 }
: O6 j8 I; u2 R: b0 X& o4 H // This is a simple schedule, with only one action that is8 ]3 _* H0 R1 Z/ F+ R! \% O) W* q
// just repeated every time. See jmousetrap for more0 W# x3 [& c! Y- U- y t
// complicated schedules.8 l$ ^' t' }: @& j7 V) A
, X* s& S- x- l5 j
modelSchedule = new ScheduleImpl (getZone (), 1);8 M$ ~: K& g1 A1 w6 N' }
modelSchedule.at$createAction (0, modelActions);
0 r) Y. y' v) z# F! b: b. a8 c # V' E* ~% ^- Y
return this;
* z, {. J8 i! j! u& B } |