HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: k6 \( X) P( _* g
9 j1 L3 M3 f! ^* U
public Object buildActions () {" h8 u" k1 T5 v6 U I' O
super.buildActions();- Y& p6 @" B5 N
4 A+ w2 T- Q& d- Z3 t
// Create the list of simulation actions. We put these in9 e s* }6 L- P# w( k
// an action group, because we want these actions to be, A( F5 h! L- ~) O- @4 R6 f
// executed in a specific order, but these steps should
& N9 X t, F/ |& H // take no (simulated) time. The M(foo) means "The message& I, L4 i' j7 O0 [& o
// called <foo>". You can send a message To a particular: o+ N% j' o& U. Q5 i
// object, or ForEach object in a collection.
' F6 l3 y+ Z8 ]- A$ G1 d# S7 p
( e5 ^+ G, G; n5 F" p/ D1 ^ // Note we update the heatspace in two phases: first run: J6 s- q+ {9 B+ w. ]3 M8 @
// diffusion, then run "updateWorld" to actually enact the: q0 I8 ^; H: f# i; b z' A G& t
// changes the heatbugs have made. The ordering here is
- N$ B% n% y7 w0 o' M3 T* d // significant!
$ @5 M0 t q7 {8 o$ [! i0 X9 v
$ n9 p6 x/ \' B% c( L/ M // Note also, that with the additional
7 ?. E; b# r! @2 q; s; N // `randomizeHeatbugUpdateOrder' Boolean flag we can- p+ j( p7 p, X
// randomize the order in which the bugs actually run# E6 D8 C. x3 S! N3 B
// their step rule. This has the effect of removing any
+ \1 }! f, t* Y5 q // systematic bias in the iteration throught the heatbug1 Y: w$ [0 D9 }4 Y
// list from timestep to timestep, A# S; n2 I2 r5 q
/ B3 l- ]: N1 v3 W // By default, all `createActionForEach' modelActions have/ L" p* U. F: J
// a default order of `Sequential', which means that the$ w4 ^5 P4 w/ f' Q
// order of iteration through the `heatbugList' will be* k! X3 T$ x0 \5 p' T6 o& F
// identical (assuming the list order is not changed% b( t, _; a! g# e2 x
// indirectly by some other process).3 p S; q. W" E' ?0 ]$ K, m( M
( Z) C! G6 F/ V. M/ R
modelActions = new ActionGroupImpl (getZone ());
, L3 @- Y) w: k. k/ H5 j* l% l) W, w6 P+ o! W4 ]8 d
try {
. u" K' M1 d- C$ [* B# T modelActions.createActionTo$message9 p6 k5 \! j- ?6 o
(heat, new Selector (heat.getClass (), "stepRule", false));
; p h8 `! ?- D5 n) [2 o } catch (Exception e) {
3 ^% g. J1 X& Z! G) f+ l System.err.println ("Exception stepRule: " + e.getMessage ());
- h; m, ?7 G2 J5 c" |! a8 W }
' ?! i1 s3 }2 I2 `# _" q
- `, F4 R- Z& g" s$ z. }# o, ^5 p" Z try {6 Y# C, q8 b1 e+ t9 O a
Heatbug proto = (Heatbug) heatbugList.get (0);
2 a& Y0 ]. l6 N _8 b! i) g/ l Selector sel = 4 J4 r% m Z, |7 m
new Selector (proto.getClass (), "heatbugStep", false); }9 z7 ~$ ? ?' \$ c8 @4 x3 P
actionForEach =3 u, V3 b4 e7 N7 s/ a3 P- K2 k* q
modelActions.createFActionForEachHomogeneous$call
5 w, \- H# m4 m4 Q( [ (heatbugList,
' }$ d: i, v6 @2 { new FCallImpl (this, proto, sel,
. H: r' r# t" L+ |0 G* r5 D+ P) q new FArgumentsImpl (this, sel)));
' L+ k# z9 m$ ` i; t } catch (Exception e) {6 n# ?2 L1 j" l
e.printStackTrace (System.err);
, f/ E, X; }, J% v0 k) k }
+ t; W* }2 j1 b* W% U! ?
" Y) A4 ^& ^" T0 C syncUpdateOrder ();
9 Y3 l0 ~* A: k/ _- f
2 b6 {7 c( ]) [- x try {
; C1 R n' ]0 R0 Y, z modelActions.createActionTo$message
6 [) ?2 a2 y9 g; ?5 j E3 m (heat, new Selector (heat.getClass (), "updateLattice", false));
# M5 [/ G. ^! c7 Q* O/ k } catch (Exception e) {( P& ~4 W! ~1 S5 ~
System.err.println("Exception updateLattice: " + e.getMessage ());0 q) B! t. [1 N. h1 E/ J
}$ l% k- h/ v* T$ x5 _
& f5 ]/ K: R* I8 R, ?. t // Then we create a schedule that executes the
$ S Y3 l, F& E* t: ?8 m$ {, f // modelActions. modelActions is an ActionGroup, by itself it
" k$ N8 g) T' W+ o6 T // has no notion of time. In order to have it executed in
. u h7 @$ Z1 G- `) d4 P // time, we create a Schedule that says to use the
9 R0 a4 R& Z7 G! p0 k // modelActions ActionGroup at particular times. This9 m3 f" i% d; V) |3 D
// schedule has a repeat interval of 1, it will loop every
9 l' x1 ^$ c X, r // time step. The action is executed at time 0 relative to. t$ k: m8 E7 D1 c
// the beginning of the loop.
( g" P( C6 c( b1 s* u% m# E0 B5 ?* _% s$ e0 z
// This is a simple schedule, with only one action that is
1 S5 ]* V r4 P4 N4 O! T // just repeated every time. See jmousetrap for more1 c; |5 v* _, n: z: k9 z
// complicated schedules." [( c# j u C( X
! @, H: S8 }* e* U& @
modelSchedule = new ScheduleImpl (getZone (), 1);
- V2 n/ j( y2 N& X G modelSchedule.at$createAction (0, modelActions);* u" b. A# ~+ ~6 G7 i
- t' j6 `0 m' ~- F& } Y- }
return this;( R( y! [/ b4 e' {, c1 Q
} |