HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% T5 E& |- ~3 W5 |
6 ?) ?% d4 n% |# d public Object buildActions () {
( m& D( @ u8 G4 b; p: o super.buildActions();
0 H. l( e2 t8 ^3 w & ~: N! ]: `1 @9 a
// Create the list of simulation actions. We put these in: M. g8 \. ^( T! s! k" c9 p) C, T
// an action group, because we want these actions to be" U) @( }& B0 l
// executed in a specific order, but these steps should
1 l3 f+ y1 X, `- h! N! g) M6 h* ^ // take no (simulated) time. The M(foo) means "The message5 }* w" ]% b8 s' v- B/ r
// called <foo>". You can send a message To a particular3 O' H4 b4 x" w7 Q% X5 L
// object, or ForEach object in a collection.
( O4 u" `8 [/ ?1 Z9 O6 x9 |
8 _ w5 |! E+ r // Note we update the heatspace in two phases: first run
" T% ]2 p; k# I/ ]! [" l2 V4 ^2 z // diffusion, then run "updateWorld" to actually enact the, T3 ^3 ` I- i7 c+ R* D4 K$ c
// changes the heatbugs have made. The ordering here is
- \. X* @( y( w# }; W // significant!
% z* a/ j6 d' _
8 \$ L7 B k, n3 y // Note also, that with the additional
$ V7 ]" O& j$ j1 q8 q" C" U8 Q1 R" N // `randomizeHeatbugUpdateOrder' Boolean flag we can9 M* A( T( T% f2 @
// randomize the order in which the bugs actually run
8 m9 J7 z, D/ }2 ]; Q S6 `( r // their step rule. This has the effect of removing any
3 i5 F8 Y: p+ R/ }6 ~0 E // systematic bias in the iteration throught the heatbug& A Q+ t0 C, q* C" S
// list from timestep to timestep: M: U- I/ y% ]" ]( v: Y- Y8 I+ L
3 B$ D" n P( H' a+ G // By default, all `createActionForEach' modelActions have
3 C& c2 J0 y3 `, X // a default order of `Sequential', which means that the3 f0 _, G1 d R. {: j4 {
// order of iteration through the `heatbugList' will be
: m' n% {5 j* P4 }$ N' m: c // identical (assuming the list order is not changed g6 ?/ c+ V6 n- o4 _7 s9 d
// indirectly by some other process).3 ]- F8 w+ h. q/ Y7 F) ?5 h
% L1 t7 N" n7 X! X9 x0 [& T
modelActions = new ActionGroupImpl (getZone ());
c8 I- c* l6 e2 w2 F1 G1 e$ ]% @/ u) f6 g
try {3 ^5 G" f& K; e- L& V4 {# I* }
modelActions.createActionTo$message
# @- o# A% _5 ^0 N) Y) B (heat, new Selector (heat.getClass (), "stepRule", false));* q+ Z( S! }$ c: E. x; _/ e
} catch (Exception e) {2 t n2 V( R+ [' `9 _9 L% H! ~
System.err.println ("Exception stepRule: " + e.getMessage ());9 H# S; C: t" j. ]+ C1 }
}3 ^, [3 x: ?9 X) b4 o" N
2 q! B3 V" ]3 t% w2 J% C try {. m' M `3 ]) U5 B1 j
Heatbug proto = (Heatbug) heatbugList.get (0);4 W1 R$ v# L& X& h' f
Selector sel =
% ]5 S+ c4 l/ I( z# \ new Selector (proto.getClass (), "heatbugStep", false);
3 W0 |* p: s! N O8 J! q actionForEach = ^. T4 E$ U3 G% t; E5 N) G9 ^
modelActions.createFActionForEachHomogeneous$call
: u7 N0 v7 v4 u6 s (heatbugList,
5 L G: ?( e) e1 T j' J' K new FCallImpl (this, proto, sel,, b7 z: j; Y6 e% l1 N, z2 c( i: ]
new FArgumentsImpl (this, sel)));
2 w9 m7 M7 r0 H, x } catch (Exception e) {% l# Z& r0 c+ e# v8 Z
e.printStackTrace (System.err);$ [* `, Q1 m- u) U1 W
}
1 Z& _; Y. Q! h# T# q) I; {7 O# o % o8 C& ]1 A" w/ C) b
syncUpdateOrder ();
1 q, e4 x* _. g% T. p
+ [1 F3 t8 {6 m: @ try {
0 k$ j" P. G+ w modelActions.createActionTo$message q, z! ?: y# O0 W
(heat, new Selector (heat.getClass (), "updateLattice", false));
: x* [2 g, c3 f0 b* @5 P8 n8 c } catch (Exception e) {" ^6 P; Q/ ?! a- b3 b `
System.err.println("Exception updateLattice: " + e.getMessage ());5 p$ U& ]7 h6 m
}
5 h9 |6 W0 a% M( E1 z( Z" h ) t9 F5 G( Z7 E! `' n# m7 W
// Then we create a schedule that executes the
, @0 A, ]6 e: }1 |- g N% s& H* e; E // modelActions. modelActions is an ActionGroup, by itself it% I3 R% O# t$ A4 p3 p9 _
// has no notion of time. In order to have it executed in( C+ L& v5 ? P7 u0 c$ {1 M
// time, we create a Schedule that says to use the! k; H/ V& T% P: w1 N" I* I Z
// modelActions ActionGroup at particular times. This. N) _: o$ Q& R& o/ y! _% ]; K" G' C
// schedule has a repeat interval of 1, it will loop every
$ {( a; X, s" m6 r8 ` // time step. The action is executed at time 0 relative to8 E% ~9 f$ s7 z9 ]1 z
// the beginning of the loop.. T- D$ I8 Y2 w4 c9 a' M0 E. O
( P( K! l$ y$ }0 B4 d // This is a simple schedule, with only one action that is
, E; \1 V7 S$ [8 d // just repeated every time. See jmousetrap for more
' K, N ]% J( A7 Y$ G // complicated schedules.
1 a. E! J) g) m( ~1 i 8 \, I8 W. O9 n M- t3 v9 W
modelSchedule = new ScheduleImpl (getZone (), 1);
$ \0 S; ^% @, F8 j( ^, | modelSchedule.at$createAction (0, modelActions);6 v/ c! R3 ?( ?- v
% c4 K9 x$ |; k2 X9 @8 R
return this;! Y! N6 }+ c' _: l
} |