HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* l8 |) `$ Z$ O) G# y3 y
0 v6 \9 V% r7 l$ y: W, Y public Object buildActions () {
( x% e% }8 O3 c super.buildActions();
. P3 G, Q4 y) X! _# M4 K ! v F3 p A" r7 E* q+ V) z& t7 b- T% ^
// Create the list of simulation actions. We put these in) m! O' s( F7 i8 b5 p: F2 I, `
// an action group, because we want these actions to be7 b4 g+ D! r' \
// executed in a specific order, but these steps should
7 v5 U* U/ `) t; T. f# H // take no (simulated) time. The M(foo) means "The message
9 U: Y& f/ Y/ I. P+ Z; h. t // called <foo>". You can send a message To a particular2 G# N$ @/ M4 S+ e% _* u
// object, or ForEach object in a collection.7 s+ J0 x* W5 t/ x/ N! J5 K" [
: p4 V1 N8 {3 j: R+ T // Note we update the heatspace in two phases: first run
0 s8 ] W; }. ^& c% ?+ \( b // diffusion, then run "updateWorld" to actually enact the3 S P2 I4 U# c9 D- N3 k% v r# _
// changes the heatbugs have made. The ordering here is! Z' G8 K3 g0 ?/ h" c
// significant!
' R ?8 @4 [# I$ c ! J% d A5 c# q1 f: c# j, [
// Note also, that with the additional
* j6 r5 S* ~+ e4 r8 E5 [, ]2 V // `randomizeHeatbugUpdateOrder' Boolean flag we can S& Z& ? o$ g+ k; ]% Z
// randomize the order in which the bugs actually run" `5 ^, u6 ]5 K; p& t
// their step rule. This has the effect of removing any
7 T) F) R+ A# r // systematic bias in the iteration throught the heatbug3 W/ w& f+ q! G% `
// list from timestep to timestep
( d2 n" g+ l) p$ A
! T0 f" O1 e5 } // By default, all `createActionForEach' modelActions have
: u" j# _5 ?+ j. K // a default order of `Sequential', which means that the
) j9 s1 a8 r2 b6 Z8 e // order of iteration through the `heatbugList' will be* G# g! L5 z8 o5 X
// identical (assuming the list order is not changed
: U. N) f% `" f2 L // indirectly by some other process).: Q3 m9 n) g$ D$ A5 u4 E8 K. l$ A
: ~: S! `0 y4 T5 ^5 o% V modelActions = new ActionGroupImpl (getZone ());
5 R* p( a& F2 a! ~# E. |6 A
& G' K9 j( |0 Y) c1 R try {1 L$ }4 N$ x" C$ F& J
modelActions.createActionTo$message0 Q+ F% J* _9 `! i4 E+ X
(heat, new Selector (heat.getClass (), "stepRule", false));# {* c+ [: P" f; T; f5 T
} catch (Exception e) {
/ k9 }: q8 D4 E7 ~' J A2 d7 A* M System.err.println ("Exception stepRule: " + e.getMessage ());
- ~1 }1 D1 T3 z }
4 @, o7 z8 X- m% W
+ K \2 ?. r# Z( L8 N: J1 r) Y' r try {) s# N* l6 Y8 P; R& F7 B9 m
Heatbug proto = (Heatbug) heatbugList.get (0);
- J$ Q6 y0 V# u Selector sel =
]4 J# B. d( `$ y new Selector (proto.getClass (), "heatbugStep", false);
- F' x- w$ G9 H, i' }/ Q actionForEach =
5 O, Q" Z* ~- J0 E0 Q5 U7 o3 \ modelActions.createFActionForEachHomogeneous$call: ?1 E' d' i2 S" ^# |
(heatbugList,
& n& e0 l a5 l new FCallImpl (this, proto, sel,
7 l2 D) d6 r1 a- p5 s new FArgumentsImpl (this, sel)));+ C% y9 Z+ @+ x u" Z& n
} catch (Exception e) {
7 Q+ {' Y! s( V- a' O6 Q e.printStackTrace (System.err);3 f& H0 x6 f& Q/ a+ X
}
! ? Y- V+ M, f3 D1 i$ u
7 t' Q8 G0 A( P: _0 M syncUpdateOrder ();
* t5 i0 h% |0 O- a( [
+ D. a0 N4 q3 f try {
8 A" w$ |/ u( H3 D# M$ H modelActions.createActionTo$message + s: e# ?# C2 r6 a! q) w
(heat, new Selector (heat.getClass (), "updateLattice", false));
2 p8 c4 |* G u6 L } catch (Exception e) {
+ V* \+ R" S" @( J. t System.err.println("Exception updateLattice: " + e.getMessage ());$ g* q3 }1 o& P: p2 i
}1 {' x6 u' L# ]% P/ s% g4 B
' x8 J, w+ {9 ~6 l+ _& w; w5 C // Then we create a schedule that executes the& ~, {4 D6 Q( E
// modelActions. modelActions is an ActionGroup, by itself it3 L8 Z; p- a; f0 q
// has no notion of time. In order to have it executed in2 ]/ \, k+ G$ V8 m; ?) L
// time, we create a Schedule that says to use the5 O( t5 G5 n6 _. m" ^0 A
// modelActions ActionGroup at particular times. This% C% d- h& R: z- _& a9 P
// schedule has a repeat interval of 1, it will loop every
7 g3 A) B7 C/ _& }# \! r // time step. The action is executed at time 0 relative to
6 L& H( R/ \ } // the beginning of the loop.
5 |) ^6 z4 ?( l! s# X
% x/ m& a2 r7 P // This is a simple schedule, with only one action that is7 p h% L. l6 L$ T' l! w5 W
// just repeated every time. See jmousetrap for more+ Z+ V3 U: s3 t: ~ |% A
// complicated schedules.
$ E+ o4 z. P/ m2 D0 Y% \8 R8 V! z
7 l2 c9 M( m( ]7 Z8 W2 W/ n modelSchedule = new ScheduleImpl (getZone (), 1);
. A0 i6 I( I, v4 T modelSchedule.at$createAction (0, modelActions);# j ?& z: }; w# c
9 X2 s! i$ ^/ L4 v: m6 B0 p return this;
4 b6 F. `, [4 m" e! w8 N } |