HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# V' D% P: w) f3 T8 Z) i- ?
4 x" m5 |1 e9 g L# P public Object buildActions () {1 h4 b8 Z8 P% r( C0 C8 t E* V7 {
super.buildActions();
' |2 ~. S. Q6 o8 t; R - _) [) O5 c4 H6 v" u8 _
// Create the list of simulation actions. We put these in
/ u8 L, \0 l' k# P; r // an action group, because we want these actions to be
1 W5 o7 {: d5 V2 b // executed in a specific order, but these steps should% {7 ?: }. j/ [ R
// take no (simulated) time. The M(foo) means "The message
; D- {8 n6 ?: n; a; M9 c // called <foo>". You can send a message To a particular- z$ ^. `: g; b4 m
// object, or ForEach object in a collection.
2 i1 `: \8 w/ X/ a% P& Q 0 ~3 f* D" U8 p' _
// Note we update the heatspace in two phases: first run. p& K, J- K6 M; s; [
// diffusion, then run "updateWorld" to actually enact the2 s3 @8 U! S2 j+ U& p9 A
// changes the heatbugs have made. The ordering here is
( F' W8 p4 N) ? // significant!
7 V8 w% ], |! E6 R& z $ u U, ~2 J: G P5 S4 h4 c" ?; _. z
// Note also, that with the additional
# o! P3 h: z V) W // `randomizeHeatbugUpdateOrder' Boolean flag we can5 @2 A5 S% k) H/ Z' o
// randomize the order in which the bugs actually run9 p/ W. ]- }5 ^( F5 P% n8 J, N
// their step rule. This has the effect of removing any4 h- @3 w) A+ \% w# d/ z
// systematic bias in the iteration throught the heatbug
- G3 d2 b' F$ S% V2 Q // list from timestep to timestep
) A4 Q8 u- ?6 P' v0 J# M 8 {. W% k( s; ^$ c
// By default, all `createActionForEach' modelActions have" F" F: a( b/ r9 H0 r( T
// a default order of `Sequential', which means that the
! P" }4 k$ N. x+ T: u! Q) D // order of iteration through the `heatbugList' will be
5 B+ @8 j5 u2 n, t. S8 Z // identical (assuming the list order is not changed
, T D6 O( s" } j L: Z // indirectly by some other process).5 }9 B' [; D3 t7 _9 e+ k' `; @
. h8 ^$ e1 E' j: o3 U; L" c
modelActions = new ActionGroupImpl (getZone ());
) o0 q. B6 i. C2 q3 w6 n+ i, o# H; r& ~ J7 p* ]/ T
try {
2 e( T* k7 G0 ]" |+ Z+ k* t6 V8 E modelActions.createActionTo$message3 y" M* _: ^) F/ j
(heat, new Selector (heat.getClass (), "stepRule", false));. F# f8 N, O2 `) L
} catch (Exception e) {
0 p5 U" r9 I. Q5 W" Q System.err.println ("Exception stepRule: " + e.getMessage ());
3 w: e1 E @* S8 a }
$ \+ r- b" v1 o$ j) g2 d: ~6 c. p4 S# J% p
try {; V3 A t( e a# q
Heatbug proto = (Heatbug) heatbugList.get (0);! `, h% c* t: `" S5 s. v
Selector sel = # b# p, [3 s1 v
new Selector (proto.getClass (), "heatbugStep", false);
0 F0 E) c! G3 C |/ G+ S) } actionForEach =4 N* a" A& Q' b% w/ M: m
modelActions.createFActionForEachHomogeneous$call
, T! ]& e1 }7 |- r* O1 q% X: N (heatbugList,
& O r* x7 I# t/ H new FCallImpl (this, proto, sel,
5 s& O( L+ e. V6 X( G1 I o1 D4 i; I new FArgumentsImpl (this, sel)));9 x) j5 N; U7 o3 |- _0 y3 D
} catch (Exception e) {
$ P1 J/ f$ G3 Z e.printStackTrace (System.err);
( z! d! G, w r% F \" F }9 r; ^, A9 P* e" b3 o6 r1 B" h+ S
# r2 o) d/ m( r; ~5 ] syncUpdateOrder (); `+ d2 X: a y1 G8 ~1 E
4 d: X) p5 }0 E* U
try {, O7 W0 h; q7 o7 P/ D- t& `0 w
modelActions.createActionTo$message
5 I+ e1 h6 v" f" ?. |( F7 T' ~ (heat, new Selector (heat.getClass (), "updateLattice", false));
8 l( u" I, L9 K+ t } catch (Exception e) {& w2 Q/ p# e4 s% `
System.err.println("Exception updateLattice: " + e.getMessage ());
7 n5 g7 g2 ~4 c) u9 r& \3 I( G }
3 _% N/ y# ?; T2 L& c% T8 j4 C # |- J; p2 e ?9 Y' `) E4 O
// Then we create a schedule that executes the
8 D5 v$ [/ a# O! B3 F5 c3 z3 v9 [ // modelActions. modelActions is an ActionGroup, by itself it
0 `, G$ z S( T# i0 a // has no notion of time. In order to have it executed in
+ C2 L% \! d" Z: w5 k // time, we create a Schedule that says to use the
/ ^6 `/ g: V$ e% C$ [ // modelActions ActionGroup at particular times. This
3 l4 H/ f& w* i' P' p* H( W# g& d // schedule has a repeat interval of 1, it will loop every3 G8 C1 ? I$ |1 n9 J4 M
// time step. The action is executed at time 0 relative to/ v2 [# ]* |$ t; F2 j4 n
// the beginning of the loop.
* j6 z, r4 L3 _1 }: g% U Z% @- h0 X- x7 _* S) t, @; w. K0 }
// This is a simple schedule, with only one action that is
. N: l: `: i- \ // just repeated every time. See jmousetrap for more* z* Z$ e$ X) _! } k
// complicated schedules.
- `/ [* k, X3 R' t/ k9 e- T& d
/ O% W( O; `- Y5 B9 o modelSchedule = new ScheduleImpl (getZone (), 1);
9 e( E; e1 r6 m: [ modelSchedule.at$createAction (0, modelActions);& s$ D8 V5 I7 ], ?5 D" v7 S
& C/ e, K1 U8 A- l" y! a! L return this;
8 k- {' g, c3 R } |