HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 i$ I- E7 Z' W
% I+ r) F; K6 ~- |$ m. k public Object buildActions () {
0 i0 ^" I. f9 K ^, M; i super.buildActions();
) P6 l( G8 [( @2 O/ `/ x
" O) @! f# O# J // Create the list of simulation actions. We put these in8 v: ]& e, o# v( A' Y" B
// an action group, because we want these actions to be2 l$ L/ E" J, N1 T
// executed in a specific order, but these steps should
6 ]2 F7 ?4 E. x // take no (simulated) time. The M(foo) means "The message9 ]: i1 V; h+ I! g. W# b4 d
// called <foo>". You can send a message To a particular7 H; f8 b8 }6 M3 ]& r
// object, or ForEach object in a collection.
7 n9 @; R5 `9 d5 j U5 U
7 q& M( u5 X J( v/ @' B2 l5 g J% n( F. B // Note we update the heatspace in two phases: first run
7 T" {% d0 l9 N8 m4 w; ]9 D, B( N: U1 ^ // diffusion, then run "updateWorld" to actually enact the2 M; R. P# u, V. F. l+ I
// changes the heatbugs have made. The ordering here is2 U7 r8 f8 I& a: E' p: A
// significant!
6 n4 V7 A1 I8 c- ?6 `# L1 W _! y+ N
" R9 n q; l+ k8 s; M' A' r: y7 Y // Note also, that with the additional
4 M4 ^9 k ~# e3 y3 |' _: a+ [% i // `randomizeHeatbugUpdateOrder' Boolean flag we can9 C. n+ }9 L- g9 ~5 P/ A! ?
// randomize the order in which the bugs actually run
* U: J& N0 l7 w+ m // their step rule. This has the effect of removing any
. I. @( ~7 n+ S8 f0 ^$ U // systematic bias in the iteration throught the heatbug! Z4 Q% `; S2 G7 k( U& f
// list from timestep to timestep
7 `3 }& y& A5 K% n2 V7 z+ d 8 F& N. `7 v. k, c/ N9 \$ ]
// By default, all `createActionForEach' modelActions have3 _$ p) j# z+ a5 @8 e
// a default order of `Sequential', which means that the
5 X. w3 q9 A9 i4 U" M6 a6 U // order of iteration through the `heatbugList' will be* s) c6 F0 Y8 B9 T. j
// identical (assuming the list order is not changed& U# w/ e5 i9 c
// indirectly by some other process).7 q; s! K5 s* c4 q8 l' E3 x
! a) R, k% B% C7 x* z( v D
modelActions = new ActionGroupImpl (getZone ());
7 U8 t# Z! P4 h6 R0 k4 j
7 l% T2 @/ {0 f# s/ H" g& [ try {
' v: P/ w( R/ R" t) n/ T modelActions.createActionTo$message
9 D2 G. ~% Z2 J2 V9 ~ (heat, new Selector (heat.getClass (), "stepRule", false));
8 M, e! A: b% w. ? } catch (Exception e) {
3 P, l" i+ Q# E) x System.err.println ("Exception stepRule: " + e.getMessage ());
1 b' A1 {* s. v$ a }* x) Z2 R4 M8 J! C
, B8 P2 p; B4 {' L; p2 p
try {4 [; K7 |& r" O, J
Heatbug proto = (Heatbug) heatbugList.get (0);
! y7 O1 p7 C8 @6 u" L3 L Selector sel =
4 d# _9 L& s$ w/ f" g! z new Selector (proto.getClass (), "heatbugStep", false);# C, ~& o6 ^/ R2 P* M
actionForEach =" x4 u& e+ g. n, f' ~
modelActions.createFActionForEachHomogeneous$call
- H8 E S) k( U$ P; G x (heatbugList,
. T" [, h. R3 ] new FCallImpl (this, proto, sel,
2 ^0 O3 j" Z% j- ` new FArgumentsImpl (this, sel)));5 x. b2 w# H% n2 i ^
} catch (Exception e) {
5 J% J% q; C0 X$ R e.printStackTrace (System.err);
( W( \' q: c: x4 c$ }- r6 b# a }5 Y( I7 f8 ~ I0 k
! h- V% v& O2 U1 f syncUpdateOrder ();
4 W9 U( Q W- Q7 E' b$ H3 U h* d7 h" g+ M7 e3 c
try {
! C8 q; x0 q3 o, v modelActions.createActionTo$message . D7 n: R% E" B1 M+ L& d
(heat, new Selector (heat.getClass (), "updateLattice", false)); R! v2 Y- Z3 t
} catch (Exception e) {9 P& S |6 V$ X
System.err.println("Exception updateLattice: " + e.getMessage ());
" K$ ?: ?2 `, S% Z+ ~4 k }6 Z- c# e+ O( t3 j; Z
7 i- X6 Y7 _ A& S6 ^ // Then we create a schedule that executes the* I# ^! [( f* E
// modelActions. modelActions is an ActionGroup, by itself it
2 e5 I+ Y8 s5 f% a4 R9 q // has no notion of time. In order to have it executed in
0 K1 O7 J/ ? U2 S // time, we create a Schedule that says to use the ]3 Q" J! }' w7 I! Y. v
// modelActions ActionGroup at particular times. This: U# ^& c- A0 t4 S5 }' g
// schedule has a repeat interval of 1, it will loop every* y" [7 H1 c6 `
// time step. The action is executed at time 0 relative to6 l5 O/ M4 f$ h! a
// the beginning of the loop.0 [; C! e" ]" @, C" ~$ E- _% V+ @+ e
, L9 D1 g( J2 S+ [ // This is a simple schedule, with only one action that is
/ e8 N5 C9 E: h+ E6 ~% F+ y // just repeated every time. See jmousetrap for more. ^' I2 W" K$ N& m
// complicated schedules.
2 O; d3 Y: Y+ C5 }6 c0 D
$ k6 q3 V" s. G, m modelSchedule = new ScheduleImpl (getZone (), 1);
7 a8 y* B9 [3 P1 U4 k5 y6 t modelSchedule.at$createAction (0, modelActions);
6 K, \. }+ [1 z # U- E7 B9 J! `' Y5 t# _. d! Q
return this;" U/ \) Z; W6 I7 }) O
} |