HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 K$ \; U' C, R; o; ]& d; g! D- W- P5 S
public Object buildActions () {
& n- ]3 w/ s. k9 D q super.buildActions();
* B7 c# K! O- P1 f4 O7 [9 b
6 m+ W; j$ S- v // Create the list of simulation actions. We put these in
: G+ P+ A) Q% f; l // an action group, because we want these actions to be; n6 P0 f" s4 `9 E, |- i' O+ R
// executed in a specific order, but these steps should( g' x9 }* N! v
// take no (simulated) time. The M(foo) means "The message
$ X( h) w. G7 w8 p+ f0 m; H // called <foo>". You can send a message To a particular! q, A) P0 I$ {
// object, or ForEach object in a collection.
' M8 g6 S2 |+ E2 C8 H5 K
^" ~$ A$ ^- q1 } // Note we update the heatspace in two phases: first run2 {% s9 g0 J% ]+ I
// diffusion, then run "updateWorld" to actually enact the+ H- _8 h. r7 j
// changes the heatbugs have made. The ordering here is7 r5 Q; k: M5 {+ L n7 Z& b
// significant!
% ?; \: `6 E5 M6 Y9 v% J 2 j$ S; j6 f3 B! K3 q
// Note also, that with the additional
& ?/ E( s0 P2 c& S // `randomizeHeatbugUpdateOrder' Boolean flag we can
1 D: U w- R) V( @$ v( P // randomize the order in which the bugs actually run
. M" {/ k0 b9 k2 j% i // their step rule. This has the effect of removing any
) g Y: o$ o1 U+ J+ p // systematic bias in the iteration throught the heatbug
5 h) N0 }- C: y* n1 e // list from timestep to timestep
0 `) E# x+ W' j, x D; m d2 a* S( ^+ C
// By default, all `createActionForEach' modelActions have, R- |6 ~ L; F4 I! j2 R( a
// a default order of `Sequential', which means that the0 {/ c; w8 ~# \6 t* m N
// order of iteration through the `heatbugList' will be' P' e; T& U: H' V
// identical (assuming the list order is not changed
: \- H8 H) O; g% m8 o0 V // indirectly by some other process).
( a% |1 ^! v! n5 v6 D i/ Z5 s
# w! _8 v, ^7 Y% w modelActions = new ActionGroupImpl (getZone ());
. z) _0 }/ X. V6 u; m8 z4 b
: {9 X4 Y( E3 [+ `6 f+ _3 o3 W try { E1 D) i& N. U, C" Z
modelActions.createActionTo$message
/ j" C. S" {! |. i. [5 F' T (heat, new Selector (heat.getClass (), "stepRule", false));
$ q: M) ^- B, t+ E% ^7 a } catch (Exception e) {
$ L+ l6 e; m2 u( p: l2 M( ]4 Q System.err.println ("Exception stepRule: " + e.getMessage ());- a* G, H3 E A; N; x' ]
}
% L5 o! c0 y& ?8 L0 X
8 x S; D3 T( f/ [( F try {
# Q7 W: p. C M6 o4 A Heatbug proto = (Heatbug) heatbugList.get (0);8 s3 Y/ i" _4 p
Selector sel = ) ^0 f7 x: P9 T0 W/ G E
new Selector (proto.getClass (), "heatbugStep", false);
/ M2 v! M% y- \: z1 B actionForEach =
. b' H$ G$ G, h4 s6 ~! z' v' B. { modelActions.createFActionForEachHomogeneous$call/ q% r) [$ d6 Q1 J6 O
(heatbugList,
4 n# ^# R+ u% f$ W8 Z/ h+ S3 P& y new FCallImpl (this, proto, sel,
- I6 V* K: L) u1 Z new FArgumentsImpl (this, sel)));+ q# F% U6 |, n. ^5 s- z% a% R* J5 ^+ u* e& d
} catch (Exception e) {. y5 R `# z: f% ^/ _
e.printStackTrace (System.err);
& `9 A3 v. s% M }) D) R5 o7 V! E$ k
4 u' Z9 G; C4 Q& }* S! M6 {5 b syncUpdateOrder ();
6 c* t# E! [/ l0 \! E& ^& o1 n) L3 v0 c! q1 F. O
try {
: {+ c* q# G% u O0 t6 P2 ?, Y modelActions.createActionTo$message
. r4 }. S- y: t: z/ | (heat, new Selector (heat.getClass (), "updateLattice", false));+ M! f1 P( O2 F/ W! F4 b0 r7 O
} catch (Exception e) {
5 K7 `6 J+ ~/ U( c2 g7 G System.err.println("Exception updateLattice: " + e.getMessage ());$ V: x$ e, l' T7 t' Z! ^. z
}
5 `& q' r9 @% _
& |' g f) u o p* V" M! x" x# i // Then we create a schedule that executes the- g/ l5 |9 N- d- a. R$ g2 G I2 {
// modelActions. modelActions is an ActionGroup, by itself it* z( y; Z+ I, g/ T! o3 K: J0 W
// has no notion of time. In order to have it executed in
4 D3 U$ x1 r0 } // time, we create a Schedule that says to use the9 P" o6 e5 E& \) n' H5 l) o
// modelActions ActionGroup at particular times. This& \8 Z% S) G% k7 s; j! b# w1 L& R% {
// schedule has a repeat interval of 1, it will loop every0 F& s7 ]& c% ]7 C, \
// time step. The action is executed at time 0 relative to* _4 `3 d4 k" e/ ~/ n |
// the beginning of the loop.4 s" U. i; z h( d6 q3 j
7 O8 B; D- q" A3 R' |8 t // This is a simple schedule, with only one action that is
7 J8 Z9 o3 h" o: w" K7 Z) r // just repeated every time. See jmousetrap for more. ~ w8 Z. `( k2 f' d4 ?
// complicated schedules.8 t! s& o9 K8 ]; \7 }
# q5 C" B% W L, D2 m modelSchedule = new ScheduleImpl (getZone (), 1);
0 h, [+ y# V O6 g modelSchedule.at$createAction (0, modelActions);
! L: R3 Q; O1 B$ M f. N X% N+ H' d( e+ f6 F1 }! E
return this;- b8 V/ q1 S A. j5 V7 k
} |