HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 r$ C' V3 S2 m5 s& n
4 `0 Q4 |% L- |; \+ f2 M! E public Object buildActions () {
* c3 v O4 x: d# x; L super.buildActions();
' }5 Z [, G/ ^/ I
* k! \/ m& V1 \* w8 G) ^ // Create the list of simulation actions. We put these in! |- q7 a' E3 r7 K
// an action group, because we want these actions to be
/ z: i2 P z$ M // executed in a specific order, but these steps should
1 f9 W/ C& u7 Y: ~+ a // take no (simulated) time. The M(foo) means "The message
" L% a, p: P5 ~5 F2 B& K) Q0 ?! C // called <foo>". You can send a message To a particular
7 @& ?4 n) s# R1 o G; e- ~ \+ z B // object, or ForEach object in a collection.* r" Y) Y6 R* u0 V
$ v) i ?3 I+ a! C8 a // Note we update the heatspace in two phases: first run" s0 Z, o5 K2 m6 B
// diffusion, then run "updateWorld" to actually enact the
! o/ I3 R4 {" b$ T // changes the heatbugs have made. The ordering here is
, u. d: |( d4 ^. _, Q, x; ^% K8 X // significant!. w+ }4 F% B# f" ^! e) W2 b
6 c/ y" n2 J4 V/ ]2 C! P9 O* ` // Note also, that with the additional" e3 Z; Q! U; ]0 Z, {
// `randomizeHeatbugUpdateOrder' Boolean flag we can8 B% V' o% D0 N/ i7 N
// randomize the order in which the bugs actually run
. ~1 u7 Z2 k. J' @# w // their step rule. This has the effect of removing any& U+ a6 C9 p- _3 d4 G# K
// systematic bias in the iteration throught the heatbug- c; W6 `, i0 W, P" ]
// list from timestep to timestep
9 ] ^1 s, q. Q S $ e3 A# N( p/ ^" L& g( b) @
// By default, all `createActionForEach' modelActions have% T7 W: ~8 T* ]/ Q: |3 j
// a default order of `Sequential', which means that the6 ~* [3 n+ K$ B: T
// order of iteration through the `heatbugList' will be
! G# d1 e9 f! q% J* m( S3 E* O // identical (assuming the list order is not changed$ T7 L9 l& F: {. B1 ^/ ^
// indirectly by some other process).
$ n6 @; M* K" Y3 u; y: d8 Y , p8 v. _1 G9 _1 X. a
modelActions = new ActionGroupImpl (getZone ());) c' J9 M% m# P0 e/ k1 B
8 `6 N/ `4 T) q( W/ P1 M try {
8 c& a/ x: J6 D/ T+ e. P* C modelActions.createActionTo$message
" y- Z* H/ F# M9 X5 E6 ^ (heat, new Selector (heat.getClass (), "stepRule", false));
# U5 D5 R) W+ T2 c } catch (Exception e) {
' Z+ V+ C) X" c6 J0 x6 p# s5 x System.err.println ("Exception stepRule: " + e.getMessage ());
6 r) h' S! v: y3 s }
' X; b+ T* r. P
^( s/ p# I. E& _ try {* p9 i. w' c7 W5 R, V1 z5 O1 b# m, H
Heatbug proto = (Heatbug) heatbugList.get (0);
. Y) l% r: d( {) g Selector sel =
H/ P5 G! F5 E7 h6 E new Selector (proto.getClass (), "heatbugStep", false);
$ @. o5 E5 {7 u# l actionForEach =0 l% I2 P( n! C3 I; I
modelActions.createFActionForEachHomogeneous$call0 D# W/ [# G; l0 u" Q9 T
(heatbugList,
; N5 s" b1 u: P+ v; I. u new FCallImpl (this, proto, sel,2 e5 ]) r& h! g# H
new FArgumentsImpl (this, sel)));! q! i& ?0 S9 o& Y4 I8 _4 t" n
} catch (Exception e) {
% a) w1 a2 k' X. g u3 A e.printStackTrace (System.err);
* c/ k& _2 n W( q" _8 `- A }; v8 b$ p* L5 {9 M, G
0 ~1 h& n1 z: J2 L
syncUpdateOrder ();
6 C" n% p4 f# g( a9 A0 C5 }$ E$ |0 z
" N& C7 j4 X4 {; e) C' o try { y( d' E% l( e8 N0 G
modelActions.createActionTo$message 7 M, E6 x6 g O4 M! \* ]
(heat, new Selector (heat.getClass (), "updateLattice", false));
) t4 g) A5 v! p+ h } catch (Exception e) {( ]7 b Y& S$ A& N1 ^2 \$ L
System.err.println("Exception updateLattice: " + e.getMessage ());
& v4 w' c4 o8 b" @' i7 _% z. ^ }- X2 a U. h8 }1 \2 z3 }
. n$ A$ {3 d0 W4 D" z( i, c" c
// Then we create a schedule that executes the( i3 [: g H$ o5 b6 j3 V4 z7 N; [
// modelActions. modelActions is an ActionGroup, by itself it0 k) z) `# A) L# Z: r+ H1 e; E7 E
// has no notion of time. In order to have it executed in8 p$ K0 I1 t u ] F3 o
// time, we create a Schedule that says to use the
1 }% a( l& D" I) U1 \ // modelActions ActionGroup at particular times. This
9 o# B5 w, L0 ~! R6 [) v7 r8 w8 x" [ // schedule has a repeat interval of 1, it will loop every: p- t% }8 X; v% G2 b2 ?
// time step. The action is executed at time 0 relative to
, V1 f% E0 S% H# f! k) X- j // the beginning of the loop.
- l3 n2 p. i- p) E1 f( E' ]- Q$ ^# c# Q5 v3 h( u
// This is a simple schedule, with only one action that is8 {1 [& ^. m: P9 a. K7 H
// just repeated every time. See jmousetrap for more
$ J6 s5 k8 W) w // complicated schedules.
# k. j1 j6 \9 L4 b7 a - R F: z5 h+ t
modelSchedule = new ScheduleImpl (getZone (), 1);! `" g. x; ^/ ^7 w- f" W0 [
modelSchedule.at$createAction (0, modelActions);0 _! Z$ o" n I! X; Z3 j
/ A. J: h9 F0 j$ d" o return this;
6 i6 w. e: w/ \$ L } |