HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 ~ o, y; z0 G$ y5 @- d0 V; I
5 _9 g+ n- X! {" B7 m, z& o public Object buildActions () {
4 v {; y, \9 ]0 i/ d super.buildActions();
. |/ ^0 ?0 F) }4 c$ S5 i
2 @, C) ~. I6 K // Create the list of simulation actions. We put these in7 H' j" _) v, d( G# p- F7 q1 Y
// an action group, because we want these actions to be
i4 S% a7 `; G* w) f: k3 m. @ // executed in a specific order, but these steps should
# u( L: N* \# N // take no (simulated) time. The M(foo) means "The message1 \, f* T! X# t: N" [
// called <foo>". You can send a message To a particular
+ l% Q- Y. ` y/ [2 V5 y4 V- j // object, or ForEach object in a collection.
+ H A8 F* V/ y4 x: X& P , m+ W# U* C" K9 @. p
// Note we update the heatspace in two phases: first run4 T# P4 `; N! V! H: T
// diffusion, then run "updateWorld" to actually enact the, d- Q3 l" Q+ q0 V
// changes the heatbugs have made. The ordering here is
8 Q+ s2 b3 w0 d+ J; Y+ H3 X2 T // significant!
# t6 e! E) d" X7 r6 e * M& v6 N9 m7 ]+ `& \7 _
// Note also, that with the additional2 i3 D Z, D5 H; U* w! N( m
// `randomizeHeatbugUpdateOrder' Boolean flag we can/ R" F7 X: k- L9 d7 i
// randomize the order in which the bugs actually run: W8 E3 K1 l9 _% h
// their step rule. This has the effect of removing any: W' ^, Q8 l6 k. f' D" m7 j% X
// systematic bias in the iteration throught the heatbug$ p. W2 J+ r6 ^" J1 L! C1 M8 v
// list from timestep to timestep
4 U7 Z( Z& Z' c3 O
# N8 N# \8 Q7 C4 R2 \9 g1 w* E // By default, all `createActionForEach' modelActions have7 B. S6 e- K0 G5 t" G ], c( M) a- q
// a default order of `Sequential', which means that the) I; f) D, s$ p, V- }# P! b4 F
// order of iteration through the `heatbugList' will be
' g' Q$ `9 y9 P! s* Z8 k+ b // identical (assuming the list order is not changed
7 z7 x! E- u! ?' B. t+ Y/ d5 _ // indirectly by some other process).+ ?" @8 y% o5 Z. N4 V& a: l
# }: D5 u L' t3 G$ X
modelActions = new ActionGroupImpl (getZone ());
2 V+ B8 t0 F7 F' l1 x& P* B. t
( N0 \" l! d! `- G try { ^6 b& m+ h1 _6 W; w$ N6 [
modelActions.createActionTo$message
) {4 s0 S; s. g (heat, new Selector (heat.getClass (), "stepRule", false));
5 i; u- J8 b' J! ~ N i a } catch (Exception e) {2 Z* T$ z4 f0 \* |
System.err.println ("Exception stepRule: " + e.getMessage ());# u! \) ?6 R9 t: h/ Y0 X- J
}9 k. U/ }" h* [3 i" o+ x+ J' w4 u
9 f+ K% Y1 D v$ v
try {( r' `8 t$ M: C
Heatbug proto = (Heatbug) heatbugList.get (0);4 v6 u2 D" ?# G" Z
Selector sel =
! {% [" x7 }( n0 I! @' d) I6 r9 h. Z! q new Selector (proto.getClass (), "heatbugStep", false);1 Q( _2 u- c$ E C6 }2 ^$ i g. W
actionForEach =3 X% d$ b* i' V" f
modelActions.createFActionForEachHomogeneous$call6 O0 z. \, u* m/ |" m
(heatbugList,! P4 A+ d! J; b, @: O4 r
new FCallImpl (this, proto, sel,/ P- t! b7 L5 L5 n* k
new FArgumentsImpl (this, sel)));
0 x0 q# O7 i% V } catch (Exception e) {8 c! M. s+ e4 { H" r8 H$ y
e.printStackTrace (System.err);
. e2 a* E% R) ^& A! D }
6 y2 C3 L- L, ^' t9 L+ y * ~5 g9 y l+ j# z
syncUpdateOrder ();1 J, B5 L$ b6 P+ D$ ]
- X: M4 I- l3 W q& j& _" x- ]
try {! O* z& Z6 p, D2 `
modelActions.createActionTo$message
4 a% O7 q" X6 T% y( o+ g3 U5 F (heat, new Selector (heat.getClass (), "updateLattice", false));) m# @: j0 A( Y- T" r+ [1 P
} catch (Exception e) {7 J% {1 K" P1 N7 k8 ]+ k
System.err.println("Exception updateLattice: " + e.getMessage ());
' b U* @( V/ [* c3 P- u3 g+ { \ }, y5 G! b" h% x6 Z' g. U
" H/ F8 L7 A7 r& r // Then we create a schedule that executes the
6 D7 J0 M" D6 @$ E // modelActions. modelActions is an ActionGroup, by itself it
+ o* y6 Z% T5 n; g // has no notion of time. In order to have it executed in
$ {2 {( M$ O( e8 N0 F8 I // time, we create a Schedule that says to use the
6 K: P2 W9 X& g1 D" m' _1 n c // modelActions ActionGroup at particular times. This' @* U( C2 w- k' g9 ~2 f6 J8 h
// schedule has a repeat interval of 1, it will loop every, F: a w) ?/ O# w+ h
// time step. The action is executed at time 0 relative to: W/ ^4 I8 L/ G' b
// the beginning of the loop.
4 m2 r1 G/ M7 k3 y) N6 |! H; N1 S8 K- o# y( R3 q1 o1 Q; @
// This is a simple schedule, with only one action that is
: |) L& B0 \& v+ G // just repeated every time. See jmousetrap for more
* l0 n+ a" y9 g1 z Q% E/ Y // complicated schedules., @3 ?$ b3 P/ v( b3 e+ X
7 s+ y- H, b+ W9 v* C0 f, J: a; ` modelSchedule = new ScheduleImpl (getZone (), 1);
7 ]( I4 B2 q" Y0 _ modelSchedule.at$createAction (0, modelActions); R6 K, x. d Q/ H# H
; U5 v& Q* r7 Y' Y
return this;) f$ Z1 q1 _8 I8 Z( ~
} |