HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( h. e9 K/ i: O' f3 L1 S6 I! ^2 O/ t4 f9 Y
public Object buildActions () {
4 M( X& O4 P% A super.buildActions();2 L! o9 T; ^. U; H; D9 o" V
1 }3 Z5 j) ^9 G% G3 G // Create the list of simulation actions. We put these in
1 x1 G. h0 r( h6 o! K# ~+ H // an action group, because we want these actions to be
8 u0 E7 G% Z3 \* K% j3 e8 o9 { // executed in a specific order, but these steps should
: N( C4 {' C i5 w. }2 Z$ } // take no (simulated) time. The M(foo) means "The message
5 ~9 n5 {( ? D1 o3 L( L // called <foo>". You can send a message To a particular+ r& _) O: c* [9 h7 J. j5 W% d
// object, or ForEach object in a collection.; E& n& _9 k& k" n+ N% C& G% z
( g9 Q- d( f5 O6 F1 i7 J$ t5 P
// Note we update the heatspace in two phases: first run% z( m; A1 F2 p( X5 P3 f8 c/ k
// diffusion, then run "updateWorld" to actually enact the
" H9 c! ]% i3 K0 _ // changes the heatbugs have made. The ordering here is" R$ L; I7 o c: A6 E4 a8 v
// significant!
! c) z! r6 g9 q. t% [2 N0 ?/ m ( j% P- @" W& |% `7 O6 A: o2 E9 N
// Note also, that with the additional
' u6 t+ h( q+ _9 x8 x9 L // `randomizeHeatbugUpdateOrder' Boolean flag we can( z$ ?& w4 ~. B- r" _
// randomize the order in which the bugs actually run
9 B/ p% `( _( D( ^ // their step rule. This has the effect of removing any' w5 T- |( z# N, O# n! |
// systematic bias in the iteration throught the heatbug
+ ]1 j' h( _4 ^3 W // list from timestep to timestep
6 R1 W: P# y8 Q6 s3 W : e# N2 ?7 q8 O: k* n, B0 X
// By default, all `createActionForEach' modelActions have
7 P# s" ^7 Z0 ]9 e // a default order of `Sequential', which means that the& g# J1 C6 Z. H5 r3 D
// order of iteration through the `heatbugList' will be
# H8 h3 H* _) t* F9 C' \1 j // identical (assuming the list order is not changed
' s7 T+ S; c( T0 e. l, a // indirectly by some other process).
, i$ W! C3 _( O3 M: R. ~ ' `7 Y7 S5 h6 W9 ?! q& L& m" v
modelActions = new ActionGroupImpl (getZone ());; r3 |1 r! S- L1 J+ p2 j6 y
) Y i, g! D! }7 u try {
" H% L$ f/ i3 Y7 C6 l7 J# ` modelActions.createActionTo$message
& Y9 ` s# p3 E( g0 X; j (heat, new Selector (heat.getClass (), "stepRule", false));0 z: P5 J; C$ L V" t! K
} catch (Exception e) {; `' N8 L" d3 C2 l h0 Y
System.err.println ("Exception stepRule: " + e.getMessage ());& p {9 O7 E3 L" j
}
* ]9 u8 C8 R; x
' k8 B l& {" e# z! _ try {
# J5 M1 N) f* S% M5 t% [0 { Heatbug proto = (Heatbug) heatbugList.get (0);' L; ]8 L' H, A$ s t( t8 c, u
Selector sel =
" Z- P( v$ V5 }8 q3 Q9 n+ g% V new Selector (proto.getClass (), "heatbugStep", false);
0 |# D, d0 h6 ] actionForEach =
: M8 G: v) R: j7 U0 `6 m modelActions.createFActionForEachHomogeneous$call
$ Z) t& S3 o. c$ k (heatbugList,
/ a; f: i; x i2 e; {8 g new FCallImpl (this, proto, sel,8 I8 f1 y/ q( i( u5 a9 _7 R
new FArgumentsImpl (this, sel)));
8 E# P/ Y. u! g( ]: R/ k+ A } catch (Exception e) {
. m. z- [7 A: Y! s2 n# R+ e1 _1 t e.printStackTrace (System.err);6 T( I/ n7 p( g, ~; Z8 G. t2 i
}8 Z) [0 R- v; c1 o" ^( F) v
6 R) t/ |4 W3 {* C7 \8 a syncUpdateOrder ();
9 ~+ j' ~. r# ~4 x# w
5 y) f8 y$ W/ P0 {% t8 {( K& V try {
% |. H: k4 g- P! H$ h# h1 f modelActions.createActionTo$message $ ]& P* \6 Z% {$ \+ W. Z$ f O! l) W
(heat, new Selector (heat.getClass (), "updateLattice", false));- q' U1 C% d, r# O* q6 g
} catch (Exception e) {7 _7 Z/ Z" C6 Q3 Z
System.err.println("Exception updateLattice: " + e.getMessage ());
/ J. n+ @- m" o$ k; z }
8 D/ {7 _9 N9 `9 R
$ P r* _, Z* D- F // Then we create a schedule that executes the' }8 d( @7 ~3 u3 P1 U2 \
// modelActions. modelActions is an ActionGroup, by itself it& ^# A7 l. G6 l- z! Y1 [: J( n
// has no notion of time. In order to have it executed in
( L, t% L b3 H; L. J5 r* h0 ] // time, we create a Schedule that says to use the f* B% h7 m& Q! j
// modelActions ActionGroup at particular times. This8 q( y1 Q( W) p( s2 `: w6 p! }
// schedule has a repeat interval of 1, it will loop every
5 N1 o. v# @( s% U! k // time step. The action is executed at time 0 relative to
9 \ o# p0 j2 q7 f- M // the beginning of the loop.) ~( V8 H0 t$ R) W* ~- f F
' `8 v( r) k2 @9 I i
// This is a simple schedule, with only one action that is
" e4 F4 h! C5 X" e2 i8 v9 ~ // just repeated every time. See jmousetrap for more$ v# [6 w0 T: n3 m
// complicated schedules.& u6 o9 |) U6 Q! c. I" t
' i! S& j% W2 o- W# H% y! q% Q7 J0 d modelSchedule = new ScheduleImpl (getZone (), 1);
3 u% l6 _/ S1 N2 D, h7 N modelSchedule.at$createAction (0, modelActions);' Q1 @4 o! H$ t7 `4 n
6 K( p8 ~/ n- T return this;
' @! c5 }. ^: F2 Q5 ] } |