HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 T2 z+ G: }; t( n
& X! X/ S9 b# J6 |& z% P public Object buildActions () {
. J) J# o7 ~' A* P super.buildActions();
1 @2 J; ]+ v; l' F, v/ {7 B7 _
7 M! T3 i- Q% J$ ~& z* C: i( C7 w: j // Create the list of simulation actions. We put these in( V6 `% r+ U9 b7 ^
// an action group, because we want these actions to be4 w, b' Y$ J# P5 `
// executed in a specific order, but these steps should" t7 j4 d% A; C* J5 A9 U: O
// take no (simulated) time. The M(foo) means "The message5 ~: S( }7 n8 V
// called <foo>". You can send a message To a particular
( @- H& O( }# T6 U* h0 R; ` // object, or ForEach object in a collection.4 X L0 H2 ]( ^
- W$ ]% r: Z8 U0 B' F K! f // Note we update the heatspace in two phases: first run
4 \& c/ N8 t5 d1 v" O7 h // diffusion, then run "updateWorld" to actually enact the
8 G, |( _- X5 r+ Q- y$ G! S // changes the heatbugs have made. The ordering here is
8 H8 E! Y! ? U // significant!/ J4 c: Q- i& r% Y, }8 t
0 Q/ n$ f7 A' i" y+ j) e$ z
// Note also, that with the additional
# R9 j) `4 }9 J+ g6 w9 Z/ T: r // `randomizeHeatbugUpdateOrder' Boolean flag we can+ N: S u, }0 ]! r2 r( P s. L% K# w& M
// randomize the order in which the bugs actually run
3 T; ^) x2 L- i. H0 s( z: @6 T // their step rule. This has the effect of removing any
/ h8 U7 A G9 S8 w // systematic bias in the iteration throught the heatbug# M2 U; |- o$ O/ ]! m+ R n
// list from timestep to timestep
! ~4 l* f. r+ i C/ A
( M% ]2 T S' `# x4 d' r, X% F // By default, all `createActionForEach' modelActions have
" M( \; ? C) J: G' ? // a default order of `Sequential', which means that the& c( {$ p. m4 O' A. x ]
// order of iteration through the `heatbugList' will be
1 u+ }( u+ i8 v2 `! q$ A/ k' H // identical (assuming the list order is not changed) o( h% H" x) ~8 W% m
// indirectly by some other process).* o& C6 a, M# d! }( s) t% V' {
8 F' P" _; {1 r- Z
modelActions = new ActionGroupImpl (getZone ());# {, V% s! b H/ T
9 y* ]5 y1 i; z; T- q% m3 z try {" `' B6 x2 v% p& o
modelActions.createActionTo$message
* s$ d) H: X( t (heat, new Selector (heat.getClass (), "stepRule", false));1 q0 j9 t) y& u' y; D4 t
} catch (Exception e) {5 V( N% G: c# ]8 P! l4 R# L
System.err.println ("Exception stepRule: " + e.getMessage ());4 W. p% _- a) O8 w/ Z+ i: o2 V+ |) }
}
2 e. k, \# ]2 w, s& u
w& p, S6 c) n7 j try {
6 C# l- E+ Z& a) w0 b Heatbug proto = (Heatbug) heatbugList.get (0);& K0 T; z; s r5 u( X: C; u" t% v
Selector sel =
+ r! \1 k; t: g4 u new Selector (proto.getClass (), "heatbugStep", false);% B# C0 ]1 L# b9 S4 I2 C
actionForEach =
+ i6 Q$ l* m1 W3 \4 h modelActions.createFActionForEachHomogeneous$call# c' k2 J) @) P, ~
(heatbugList,! c7 Z, Y5 x& H/ b/ ^5 q5 C% N8 g0 X
new FCallImpl (this, proto, sel,5 E6 F# c% \9 k; G
new FArgumentsImpl (this, sel)));% u7 M0 J: Y9 v3 U+ L, l. i
} catch (Exception e) {
" a p; P8 v2 |$ C e.printStackTrace (System.err);
( [" {/ T0 i* s7 U" A7 F }
5 e# n. h. U8 q0 i7 s% }3 ^ 2 O4 m. F* p7 K3 a7 W0 a, u. B
syncUpdateOrder ();5 s# z; M" P* ~7 T. \ v+ F
, v7 d2 r9 F/ @ z/ v( C
try {. r7 k! q/ ~: x2 }: @
modelActions.createActionTo$message
( E8 \+ I- ^7 H6 S, A (heat, new Selector (heat.getClass (), "updateLattice", false));
* d! c6 \8 w* a. r; w } catch (Exception e) {5 S; [; r D3 B- y3 T: _+ N# z5 H1 C) S
System.err.println("Exception updateLattice: " + e.getMessage ());) m7 h3 ~8 G' \5 C0 a) d
}
' K$ {! q% @) b+ d7 k
2 p! }, |4 V) K: V7 H5 V // Then we create a schedule that executes the9 t J6 R% Z( B2 ^8 a2 e5 k
// modelActions. modelActions is an ActionGroup, by itself it* }" E0 p8 _7 |+ K. Y8 v
// has no notion of time. In order to have it executed in; R$ L' |* q0 z* P" Z
// time, we create a Schedule that says to use the3 V! k2 z2 W5 x
// modelActions ActionGroup at particular times. This
% \% I4 b" q$ E! \" I# n% S9 } // schedule has a repeat interval of 1, it will loop every( }% J5 B4 ^* p
// time step. The action is executed at time 0 relative to7 H( Y+ V1 X3 t& b6 J* P
// the beginning of the loop.
1 f4 N1 }/ z z& G$ p) i+ U8 l5 g7 _2 v4 D7 M
// This is a simple schedule, with only one action that is
) W2 {. {2 U- ]% b // just repeated every time. See jmousetrap for more8 t- u1 c" g( m
// complicated schedules.
/ g/ \" V& T7 c* C2 G + y5 J2 Q2 p! i% N" _
modelSchedule = new ScheduleImpl (getZone (), 1);
# f& k4 r# U/ a" O( o, Z; [2 P# O modelSchedule.at$createAction (0, modelActions);
0 w6 p) ~: P% M# ? 0 i. W! T( O. }5 f4 J0 H
return this;) u- d$ j* f/ ^0 L
} |