HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) m. @- i% l+ n
3 i1 Z$ h* Y) b6 N+ V# j( ?0 c public Object buildActions () {
/ ], a7 @$ R! h super.buildActions();1 h% O( }& W$ W% }
) ]: i) i0 `. r/ g/ O
// Create the list of simulation actions. We put these in" |8 h) Z! c* t" e5 \" [
// an action group, because we want these actions to be
/ ~2 G5 H l ]9 }$ A f& o // executed in a specific order, but these steps should* |/ N* }( B# Y# A7 l( ?8 V
// take no (simulated) time. The M(foo) means "The message
5 @ u! _( N3 P( x // called <foo>". You can send a message To a particular
2 {! O$ k, K7 u& k, } // object, or ForEach object in a collection.
( F1 I) I0 L, D, K' \) B1 V % S+ a% r( a) L- L: T" L" ~
// Note we update the heatspace in two phases: first run0 W& s' K1 ~3 ~, O
// diffusion, then run "updateWorld" to actually enact the
' Y7 K) T0 a4 q5 n6 r) [) x9 o% `2 } // changes the heatbugs have made. The ordering here is
5 d3 I+ W9 E$ F6 ], K // significant!
# U! H7 f f9 ~5 |' L4 b3 C
# g. M3 O3 r$ y" S% K5 O // Note also, that with the additional. O- A$ Z" E2 F5 n" J9 L$ c1 Z/ [
// `randomizeHeatbugUpdateOrder' Boolean flag we can
+ J# k6 i: N% O$ m) A. Y // randomize the order in which the bugs actually run- \( l$ l, M* `- C7 E! N( J
// their step rule. This has the effect of removing any
- R9 }- }0 y( V W // systematic bias in the iteration throught the heatbug
/ u6 \6 \5 q0 E- C1 {% [4 |3 { // list from timestep to timestep
% @1 {) \; K; E8 U5 V/ _
' k2 b- q$ W5 g' X* l: q // By default, all `createActionForEach' modelActions have
1 Q# |/ f5 M/ L0 m& y // a default order of `Sequential', which means that the
) s4 k0 A# l8 Q6 F // order of iteration through the `heatbugList' will be
! u" f0 {; B, V' h // identical (assuming the list order is not changed2 B$ }: f% _% F6 E) g
// indirectly by some other process).
/ d7 k/ m$ g3 Q' d
# X5 G, {4 Y- h0 \5 l- d modelActions = new ActionGroupImpl (getZone ());
6 h1 { ]; m. h
$ Q! g; G6 C7 ^ try {
2 z+ T6 T7 y+ M g modelActions.createActionTo$message
; q9 L) \; [5 c8 g" } (heat, new Selector (heat.getClass (), "stepRule", false));5 J8 x- o" ]9 L( h9 z0 P) I
} catch (Exception e) {
8 s; \8 f/ Q5 |: E- w. }: @ System.err.println ("Exception stepRule: " + e.getMessage ());/ O0 i& ^! p1 W! s3 ?. S; y& v
}
5 h8 q# f! g' c( K( f2 c0 m Z6 U4 j5 A9 {; ]4 k
try {( L/ z, u. J4 b! F/ ~8 G% H; b
Heatbug proto = (Heatbug) heatbugList.get (0);4 G" f3 ]! z6 x8 y+ F7 u8 j5 U
Selector sel = 1 V, y- f' O, |3 G- F( b
new Selector (proto.getClass (), "heatbugStep", false);
- r3 N- K- i9 ]: l" S actionForEach =' w: o: _: W2 |. L% e
modelActions.createFActionForEachHomogeneous$call/ }! W$ Q6 t a: y
(heatbugList,
/ y3 U- \$ M; B+ c0 K0 I4 G& h: N new FCallImpl (this, proto, sel,
- `6 H/ O8 T# t new FArgumentsImpl (this, sel)));$ C& H, I) e/ |
} catch (Exception e) {
0 n8 G8 G# ~ J! W+ R8 v. Z7 L/ W e.printStackTrace (System.err);* b1 ]5 D! S; I( x7 P
}# f2 N9 ?, Z- ], k% }
6 A! X2 z* h! `; W syncUpdateOrder ();( w+ l2 z3 T1 _- I* y K# C
+ t2 M+ h% v' [% \, C0 E try {
8 Y! R' k$ B1 k- A7 S! ` modelActions.createActionTo$message
5 n- |- G5 }2 }( i% d, ] (heat, new Selector (heat.getClass (), "updateLattice", false));
# ]6 [/ S a' T' e! \8 V7 C6 L } catch (Exception e) {
0 t! o& z" i+ D5 p% W System.err.println("Exception updateLattice: " + e.getMessage ());
' b9 l0 R5 G0 O, \" y" { }
; H/ f2 r, ] }! u+ ]
9 |! K' Z) v3 w( ~. h- J // Then we create a schedule that executes the: x& O8 E m% Y# c6 G
// modelActions. modelActions is an ActionGroup, by itself it
% H9 A, p0 l% B; L% }$ ?0 n) r# W4 N // has no notion of time. In order to have it executed in
# B& W# n [$ W& ^ // time, we create a Schedule that says to use the! f) _0 g3 s( M
// modelActions ActionGroup at particular times. This8 q' G, i: H8 V9 d
// schedule has a repeat interval of 1, it will loop every
5 _8 h: _* |6 c. Q* L0 K( R; N% [' n+ Z // time step. The action is executed at time 0 relative to" {" p0 ?/ z3 t; G6 }. z, w
// the beginning of the loop.; e6 C- H( A- J/ K/ l( F c1 c
7 ~: I7 ^# h' w/ F p0 A // This is a simple schedule, with only one action that is
# Z& k3 a3 g. f // just repeated every time. See jmousetrap for more4 E' f2 r+ ]' m) S0 \& O# ~
// complicated schedules.9 R) h+ w& u) ?3 H* z2 A
6 |3 ]) A: \7 S2 J' K modelSchedule = new ScheduleImpl (getZone (), 1);+ P# p3 |7 V. H2 b7 Y
modelSchedule.at$createAction (0, modelActions);0 b; |. ]: i9 W
& P+ ~! y% b" I& F- j% W* R
return this;
9 o0 [! i* m8 W8 \* ~) I& A } |