HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" M6 R8 A+ E; N& H: J
) h t( z" F% r/ t+ C public Object buildActions () {
5 m& G1 {9 X* R super.buildActions();
: E7 p+ x, d. |) p2 }( o ; w/ }3 n8 T* |
// Create the list of simulation actions. We put these in
4 c/ m. m( ~: }* w9 S! c/ A // an action group, because we want these actions to be
6 c+ r7 v; c. z6 Z/ o$ ], y // executed in a specific order, but these steps should
* L8 o' @: @- T9 o" r5 T // take no (simulated) time. The M(foo) means "The message
# a( e y( ^7 r0 m8 a. v8 X& y3 a // called <foo>". You can send a message To a particular4 |0 I( z b$ Z* w/ Z0 b
// object, or ForEach object in a collection./ K7 r# A% t; {: G+ T2 L7 I
/ r( G1 {- H% t' M5 L' [ // Note we update the heatspace in two phases: first run4 x0 a. _7 x+ r7 l' F* h
// diffusion, then run "updateWorld" to actually enact the& A% y* ^% d4 e8 ^
// changes the heatbugs have made. The ordering here is7 Y( s2 K! a/ u
// significant!+ z& R. O/ O1 K) {
3 b8 g1 X. A/ }( i7 ~
// Note also, that with the additional) c% V, y8 a9 p/ |6 C
// `randomizeHeatbugUpdateOrder' Boolean flag we can
* `: S2 z1 a0 }2 j2 x% O: I // randomize the order in which the bugs actually run. f" X2 [3 n) F
// their step rule. This has the effect of removing any
1 S0 X/ h2 n8 O) ]9 A v( K // systematic bias in the iteration throught the heatbug
# Y' l- D3 h' U; C' n // list from timestep to timestep. p# \. G( R8 n, V* o
6 z8 V. Q, I/ { L/ n [
// By default, all `createActionForEach' modelActions have
) j+ X. d6 m( Q; r T; j. b // a default order of `Sequential', which means that the4 i& g' {3 ^7 y
// order of iteration through the `heatbugList' will be
- b7 v+ }3 Y$ n% _) I* B) i // identical (assuming the list order is not changed
: V. J4 T4 h# Z: S2 P6 [ // indirectly by some other process).
2 R' O1 m) O1 s
& S' q4 l$ {) ?! |" ] modelActions = new ActionGroupImpl (getZone ());
) X1 Z9 H8 r+ g7 f" `
) z ~: V* ]! Q2 @" u9 u try {7 `2 h& G" x" r r# |2 p
modelActions.createActionTo$message
( N7 A/ ]5 R' s (heat, new Selector (heat.getClass (), "stepRule", false));
' i6 n% i/ x2 C1 { o } catch (Exception e) {
6 ~3 _* q9 s& f System.err.println ("Exception stepRule: " + e.getMessage ());
& q. u* h% c% Z! ~0 `4 a; K }$ C3 X) }9 O' h' p& y8 U% q& @
/ ]* D& x4 p6 L7 [" w. Q0 ]
try {# m. j+ K. Z; Y
Heatbug proto = (Heatbug) heatbugList.get (0);; V, ]3 n8 t+ w, M+ T# j4 x+ q
Selector sel = 9 E1 a1 F- B9 z
new Selector (proto.getClass (), "heatbugStep", false);; f* s3 V( p6 @& l$ [
actionForEach =
$ J5 V% i0 a$ P Z& T modelActions.createFActionForEachHomogeneous$call
( I2 C" W0 ]7 O (heatbugList,6 g4 y- I2 ^/ m% G( d2 Y4 ?
new FCallImpl (this, proto, sel,
3 r5 p2 j e% l3 W; K new FArgumentsImpl (this, sel)));
. k- B3 T# u+ w) N } catch (Exception e) { u' W' A3 {9 P0 ]6 C7 ]: R
e.printStackTrace (System.err);
7 M6 P& J+ i5 F# O }' _. v7 U+ |4 U6 r, d
9 q, L7 M. u7 x syncUpdateOrder ();
: H, v. A) G' K W0 W
% W+ ]/ U2 o( O% I$ J try {; S c- m& ~( J
modelActions.createActionTo$message
4 F2 a# I: w4 \# L% H" Y (heat, new Selector (heat.getClass (), "updateLattice", false));
; M2 u1 p( \$ z$ |/ {! k } catch (Exception e) {
J j s$ [; o5 Y. }$ F( q System.err.println("Exception updateLattice: " + e.getMessage ());
8 j% P7 L) |. r0 j/ @! l f& S }% v' M& \1 o* U+ Q6 N/ R0 s
/ n3 `! s$ m! ~. L/ D
// Then we create a schedule that executes the- u+ H8 |$ ~3 {9 X% ]1 B
// modelActions. modelActions is an ActionGroup, by itself it
! a9 k% r, l7 J7 k( f( M // has no notion of time. In order to have it executed in1 v8 }1 b5 C( }' U
// time, we create a Schedule that says to use the3 i3 K- T3 O" }
// modelActions ActionGroup at particular times. This; ^# R" J! [+ G$ O4 W
// schedule has a repeat interval of 1, it will loop every: z4 J. {, g! P
// time step. The action is executed at time 0 relative to; H9 B1 H4 ~: C% E! e4 e7 [
// the beginning of the loop.) S$ }4 ?1 S& p8 I5 U
9 u4 ?0 P. s' Q: M // This is a simple schedule, with only one action that is
0 p: \/ {# A6 S1 v+ Y% i1 @4 q // just repeated every time. See jmousetrap for more7 u2 G" Q* @7 o; s
// complicated schedules.
3 n! K' X# k- n! P) K
" @* Z8 q& S3 ~" x X- B modelSchedule = new ScheduleImpl (getZone (), 1);) m+ w4 A! i0 N% D
modelSchedule.at$createAction (0, modelActions);3 |3 z9 x" p' g
2 B& \% N: j' }. o/ O- w M0 J return this;8 R6 M) B+ E) x& e! c g
} |