HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. o" i7 o1 p6 @0 v
% _: W% z4 W/ {
public Object buildActions () {4 H( f$ b7 _* H( s; w5 W/ {
super.buildActions();' C3 w9 \. z! o1 |3 C6 Y% \
' i1 e5 c' u3 ?( {' Q- A
// Create the list of simulation actions. We put these in
- {) [" Y# V- d% c- J. D5 O // an action group, because we want these actions to be+ \8 R9 t& [6 X8 A- i$ K
// executed in a specific order, but these steps should" T) c; M r/ k1 R$ m8 Y7 \ g# J6 e" f
// take no (simulated) time. The M(foo) means "The message
4 `- B8 t f8 F( W% [ // called <foo>". You can send a message To a particular
) j; H( q" S8 u% u // object, or ForEach object in a collection.( L- z; L: k3 Q
% b$ C2 H8 ^2 @$ T' O) W // Note we update the heatspace in two phases: first run) M* F9 h! j0 V i/ d: M* f
// diffusion, then run "updateWorld" to actually enact the
% Z) Y! }7 W% X1 \# F) D // changes the heatbugs have made. The ordering here is
$ ], t# B2 g! @, D; [ // significant!0 B$ `, m- g' C [, O
* I2 z. s6 U% n3 x- Y7 k // Note also, that with the additional
& [$ [9 c3 R, U0 U // `randomizeHeatbugUpdateOrder' Boolean flag we can
' J4 x2 y t. |: Q( r // randomize the order in which the bugs actually run2 J( A& t; _; g$ D
// their step rule. This has the effect of removing any' E2 h7 V2 E4 _
// systematic bias in the iteration throught the heatbug
3 n8 Q/ v- f1 b4 J/ x y+ s1 B // list from timestep to timestep
- L8 e0 p% y4 C D, |) J8 Q
9 ^ t6 _* K" ^5 l4 K$ H) R // By default, all `createActionForEach' modelActions have) Z! U" M. u- d* T: a% w
// a default order of `Sequential', which means that the
% t: r7 _% a4 F/ w K7 M. _! A // order of iteration through the `heatbugList' will be+ N9 \) P, N* K( d% s
// identical (assuming the list order is not changed
, @$ T9 j! T E* W // indirectly by some other process).0 l' E$ L& G# {
. h$ ?# _. j3 D+ q% h; Z1 l4 M# I
modelActions = new ActionGroupImpl (getZone ());
, T% N y8 ?. n9 P/ p' E* b5 {) I7 D
try {
. b+ \+ V$ K* C4 [$ w: Z modelActions.createActionTo$message5 F1 g$ ]( p5 v8 F
(heat, new Selector (heat.getClass (), "stepRule", false));
2 f" b5 l, O$ K& T1 o } catch (Exception e) {+ A+ t& l! x+ r4 U7 H/ ^
System.err.println ("Exception stepRule: " + e.getMessage ());& q3 r% ]3 J1 w
}# G. T) i j( L
; [: Z! w ~0 N8 J$ N* ?$ B# Q try {9 R: y& z& m1 R/ F
Heatbug proto = (Heatbug) heatbugList.get (0);
7 S& Q# r3 q& x# x8 J5 t' o Selector sel =
, @( z# ?( b, F- P6 |' g& Y( c+ h new Selector (proto.getClass (), "heatbugStep", false);8 Z# h# M8 A% o8 P: X
actionForEach =- o0 u H& B6 x( J
modelActions.createFActionForEachHomogeneous$call2 E9 d3 Z; `- j: n
(heatbugList,& m9 w: V6 `- W; q" [7 N
new FCallImpl (this, proto, sel,
5 g& s, R, J) r/ R new FArgumentsImpl (this, sel)));
' n& r7 R. _* U } catch (Exception e) {
4 E& x& s; V( v' M! c3 W" C e.printStackTrace (System.err);/ E- y" p4 K) x" r' C4 |
}2 f1 Y m5 M8 d- T+ f
/ }1 Y u9 g, e' X/ L+ W syncUpdateOrder ();
: s, `" P# e# v1 [, b% ]/ r2 \
5 p: E- }: n/ X+ l1 M5 J try {
$ C, g% o! f( y modelActions.createActionTo$message * q9 ?+ K% m# A( {; n% H5 g4 U6 G
(heat, new Selector (heat.getClass (), "updateLattice", false));: d0 ?8 y2 [8 Q. x$ I4 f8 z9 n
} catch (Exception e) {
- w P0 W4 ?8 x/ E# ~; t System.err.println("Exception updateLattice: " + e.getMessage ());
1 ?* n1 ]) K2 ~, o% { }) h/ L2 k2 y5 G
& }, w; S* {9 [( H2 H, b8 Z# P
// Then we create a schedule that executes the$ W2 L% y" {+ D: R
// modelActions. modelActions is an ActionGroup, by itself it) x. V* v# B( F" |* t' b0 L* u+ `% Z
// has no notion of time. In order to have it executed in
! x. Y+ M/ x% f' A+ `" V // time, we create a Schedule that says to use the- c# j( c L- ?% E! ?
// modelActions ActionGroup at particular times. This
7 v: U! G% X4 ]0 L: p3 @ // schedule has a repeat interval of 1, it will loop every
( `* y6 J/ v4 G1 |' f // time step. The action is executed at time 0 relative to! O% L- L4 c! P$ ^
// the beginning of the loop.' F! y7 A3 y$ \, Q/ r* F8 S( G( K
* H- C* q( \0 _8 g, I
// This is a simple schedule, with only one action that is
/ @* e4 o I) B$ s& c$ ~; m // just repeated every time. See jmousetrap for more r0 R8 |, q" _" |3 U! P
// complicated schedules.6 ?) `/ ?9 ]+ V* z( m1 i1 d
' b: p+ k* M! |$ D9 K& V
modelSchedule = new ScheduleImpl (getZone (), 1);
5 a/ I4 M& x% u4 B* f. r- o modelSchedule.at$createAction (0, modelActions); k4 ^% t8 }9 Q) [ I
" |, U" V* k* f. u; X return this;. n- i' `1 I7 @
} |