HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 O, E- H3 l& P# D
; ^' m" H# j+ U! u public Object buildActions () {# i8 D) m. E9 m7 R
super.buildActions();3 I# w" m. P6 k& m( ~* Y
+ F& X# K J+ \# C" S- V
// Create the list of simulation actions. We put these in
& ~$ R3 w N3 ?9 M) }( ^! U1 Q // an action group, because we want these actions to be2 s8 G; A/ Y/ h! {! v, L1 o" Z
// executed in a specific order, but these steps should- t3 v5 W4 W4 [0 M0 B8 w
// take no (simulated) time. The M(foo) means "The message, N5 T+ x& _4 u& J
// called <foo>". You can send a message To a particular
L" h1 M# e7 V" X( J // object, or ForEach object in a collection.4 {( v! u1 Y- {) Y S
" ?6 P1 d" B# ?! [& ~
// Note we update the heatspace in two phases: first run9 |, S, _6 {7 W4 p# M
// diffusion, then run "updateWorld" to actually enact the
7 ]& ^ ]/ y8 y // changes the heatbugs have made. The ordering here is
& s7 q' o; a: Y0 P9 b // significant!
* Q) O5 V5 G5 W7 K- P. m5 l6 q ) `3 H' K7 g2 C5 e( Z
// Note also, that with the additional" @# N" r2 g& z
// `randomizeHeatbugUpdateOrder' Boolean flag we can
5 u1 r6 V2 t; `. x3 ~ // randomize the order in which the bugs actually run
# |& v2 Z- ]+ p4 w" E // their step rule. This has the effect of removing any
' o4 z& |9 E+ p // systematic bias in the iteration throught the heatbug
- T5 H, H, }' v+ _2 P- I' c/ k // list from timestep to timestep
( m( f7 K1 ~6 T* q - t& Q" H5 l/ f7 G; s& x; Q9 i
// By default, all `createActionForEach' modelActions have
" U; p% l1 s l* @7 ]. E( }0 d Z) t // a default order of `Sequential', which means that the
4 q5 a. y( n0 \! k: q // order of iteration through the `heatbugList' will be
5 E7 [6 B$ g! P% D* r& k3 Z1 b8 o, A // identical (assuming the list order is not changed
) X1 R9 G d [ // indirectly by some other process).% K; w0 @: Y$ k: @- ~
, V/ k5 ~: v3 C, W
modelActions = new ActionGroupImpl (getZone ());- A% p" w- \$ S( O6 X
* o$ I6 o5 \2 r3 k- R5 z# [. V+ F% ` try {
% g2 Y; q# r8 g4 Y5 W9 ` modelActions.createActionTo$message3 d9 T+ o# c" u0 Y0 N
(heat, new Selector (heat.getClass (), "stepRule", false)); C$ M3 O+ W. S, S
} catch (Exception e) {
$ c/ |1 b# d- f' A System.err.println ("Exception stepRule: " + e.getMessage ());
& F$ s, }% t& `0 V& t4 l, G$ K }1 B3 j/ I" q- m6 j* m) e y
* Y- C8 A- I0 ?; N' U& f3 D
try {# S) c0 l; J* c
Heatbug proto = (Heatbug) heatbugList.get (0);3 S( i# ~! d! |8 K4 `
Selector sel = 3 k$ W% h; T: }$ U9 t4 u8 J1 p: L
new Selector (proto.getClass (), "heatbugStep", false);7 p& z2 i1 k8 \4 J5 J
actionForEach =* w; j8 Y8 @0 s
modelActions.createFActionForEachHomogeneous$call6 ?. ^' d" ?7 m% u
(heatbugList,+ R+ ? F# E, ?( r- Q- ?
new FCallImpl (this, proto, sel,
: z4 j, q$ y: r \2 g8 i2 B new FArgumentsImpl (this, sel)));
5 W |* _4 l" j$ f } catch (Exception e) {
3 C H) t7 w( ?1 l e.printStackTrace (System.err);! V2 F1 ]+ C' P$ d' @2 A+ B: V
}
( b1 f4 i+ W; a) o ( l/ Z1 ?' I) r/ [" e2 b3 i
syncUpdateOrder ();& t/ A% t. o' d' v( ~
) D! i* \; V- R8 E; z
try {
+ E9 b- _$ Z/ M2 E; I0 `& _ modelActions.createActionTo$message 4 G0 ^& T9 e" R- l1 h
(heat, new Selector (heat.getClass (), "updateLattice", false));6 k/ M- [" x/ f8 k) z" w0 e! x
} catch (Exception e) {& \9 y" @( P0 h7 G: t! N
System.err.println("Exception updateLattice: " + e.getMessage ());/ V5 D1 }: u0 u( `1 L
}9 _: y8 s' K2 w" G" |
1 R% Q: r. L" s2 w+ ~6 A
// Then we create a schedule that executes the
$ c: E& V% L. b+ a' Q3 j // modelActions. modelActions is an ActionGroup, by itself it/ m; t1 y7 u, h0 n% a
// has no notion of time. In order to have it executed in# O" ], m `4 T1 m' _9 j5 s }" ^0 W
// time, we create a Schedule that says to use the
' m' |7 w$ ^0 g7 E! B // modelActions ActionGroup at particular times. This! j4 q6 I2 _2 r& q. q( o
// schedule has a repeat interval of 1, it will loop every7 Q& K% R/ N' f
// time step. The action is executed at time 0 relative to7 c3 F; {' a4 U- D8 q
// the beginning of the loop.
8 [ W; D2 q7 k1 c9 w+ q' G- \7 d% Y% R" i& X) W
// This is a simple schedule, with only one action that is
6 t! t7 @" U L# W( r. J" H0 e" H // just repeated every time. See jmousetrap for more4 b% _2 G3 I2 M* B
// complicated schedules.
& k$ ^9 o% _; @6 N: f 1 V" y2 } @( A* h
modelSchedule = new ScheduleImpl (getZone (), 1);
5 g( g A9 F3 G5 Z& ` modelSchedule.at$createAction (0, modelActions);& h9 \& c7 z' ?0 [( L# U* H
, d R4 J4 ^/ J/ R, d# O% H return this;
: n% N" S) j6 R6 F0 B+ Z } |