HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 k- u, } }$ f" D
' M* p% c% P( ?& T2 P; h2 ]0 e public Object buildActions () {5 H+ `" \: A/ B2 u* C
super.buildActions();6 }/ R3 ^" s: o' Y2 V
7 X, n5 g' D% P/ z" o
// Create the list of simulation actions. We put these in
7 ~% m( L' K4 c9 o // an action group, because we want these actions to be
4 [: [$ y$ ^1 R2 Q' H // executed in a specific order, but these steps should7 a$ u& a' ]# q# O* z7 x/ A1 @
// take no (simulated) time. The M(foo) means "The message
- Q6 ]7 T. w7 J1 z; Y5 g // called <foo>". You can send a message To a particular
/ f8 t! N8 y' |( o5 r7 i // object, or ForEach object in a collection.
4 \% g6 `1 s0 V) z! s5 o# s7 f 9 R) D* M5 U/ K# b0 U
// Note we update the heatspace in two phases: first run" w1 u: D5 r4 ~( Z& Z7 d) h
// diffusion, then run "updateWorld" to actually enact the9 O% `* h/ U- b
// changes the heatbugs have made. The ordering here is% g A- j$ q7 E
// significant!
# U3 t; A6 f, a 2 I2 V* I5 ^0 H. F% Z) ?! d7 \' |* i( W
// Note also, that with the additional6 ~& t/ p4 m" j# K9 r! H
// `randomizeHeatbugUpdateOrder' Boolean flag we can
% @7 |; S: @ I3 Y // randomize the order in which the bugs actually run! y" u+ h# i+ }6 {1 r: o$ h8 k
// their step rule. This has the effect of removing any9 Z! Q8 V: q d. y) K4 ]$ \! n
// systematic bias in the iteration throught the heatbug
: O3 v1 D5 R% ?6 y, Z C4 } V // list from timestep to timestep
2 ~+ ?1 l7 _* O0 g* b
6 i4 W2 _8 \9 A: j- I" |8 d! I // By default, all `createActionForEach' modelActions have
' }/ P! V& x1 w // a default order of `Sequential', which means that the, h: k) r* j5 d' D* V. [
// order of iteration through the `heatbugList' will be- M$ Y6 S( k: v2 a2 k' ?
// identical (assuming the list order is not changed. D6 h0 D y! h! i
// indirectly by some other process).
5 c' V, U+ [" ` [5 U- M8 j) F( ~/ b
" M- c+ F7 j+ K& |. d modelActions = new ActionGroupImpl (getZone ());0 ]9 R3 J) y9 z% C
) Y1 c% W" G- t" G
try {
[/ C9 d2 {( n8 W. r modelActions.createActionTo$message
) s6 X( Y5 Z0 I: i9 a1 x: H. F6 @- z (heat, new Selector (heat.getClass (), "stepRule", false));3 Y; k i* [9 G* v5 r% u
} catch (Exception e) {
7 u, z5 G. C" g4 L+ d* O System.err.println ("Exception stepRule: " + e.getMessage ());) o$ N4 k. f9 F$ I
}
4 T5 R) p9 ~: X: s" n6 F$ M. q
8 x0 Z! @6 E: M" W" _ try {* u8 X1 P2 w3 B. `: I. U" x
Heatbug proto = (Heatbug) heatbugList.get (0);
, n; s+ w; `! O, V& Y4 T Selector sel = 8 O3 u: s9 I) K+ @! c3 W9 {' J: Y
new Selector (proto.getClass (), "heatbugStep", false);* D3 {1 o; w( ~4 }2 |3 X3 \
actionForEach =8 x) B+ _/ d8 b% W& s9 g' _
modelActions.createFActionForEachHomogeneous$call7 b: k3 s- L- c& K& {
(heatbugList,
3 `: l i" t p( O) \6 s new FCallImpl (this, proto, sel,0 B$ x) x! d$ d3 V' H7 e: }
new FArgumentsImpl (this, sel)));
# l% Z: P5 \# Y7 [' k6 f) L: V! ^/ t } catch (Exception e) {$ H; x& M& r7 H/ e, M7 B, W7 y
e.printStackTrace (System.err);
* N5 q% I( z5 x: t9 H) j; W5 t }% [0 f1 X9 ?! {
5 A/ K+ |- a% q5 L syncUpdateOrder ();3 y$ J, ~: Y+ c8 m/ ?' @5 U
& I, g1 n; D; v! Z& c
try {
9 E3 t: j9 w9 N% @ modelActions.createActionTo$message . R. R" f5 u' B# _
(heat, new Selector (heat.getClass (), "updateLattice", false));
1 Q$ u( i% n0 ]7 ~9 f. g/ A } catch (Exception e) {
5 S# s8 Q) B; t9 K9 r System.err.println("Exception updateLattice: " + e.getMessage ());
8 | I s. j( `( I: w- { }
/ { ?- d# w5 ~! o" q : v# P' p- w3 f- Z! t0 |0 F
// Then we create a schedule that executes the
) [) H7 V" I% h; f/ m8 }& ? // modelActions. modelActions is an ActionGroup, by itself it6 g# a; @# s- J1 F
// has no notion of time. In order to have it executed in& i! n# M; Y% y
// time, we create a Schedule that says to use the
! T# v+ @; t: z& @; x$ a // modelActions ActionGroup at particular times. This o% E4 C8 m7 z& x
// schedule has a repeat interval of 1, it will loop every9 u! y8 h5 S3 }; j! B. u- S* }
// time step. The action is executed at time 0 relative to' R5 T. H; h$ J
// the beginning of the loop., j4 e3 J9 S5 [2 u, u' h7 t
$ v: K4 x: \0 `% t" w. ~& ]- R4 J // This is a simple schedule, with only one action that is8 I! r3 o9 ]( {* ?1 j" }
// just repeated every time. See jmousetrap for more a# o4 D+ |9 j) Z$ Y+ U5 w
// complicated schedules.. U; R1 k; \6 f' z
$ s1 g7 s0 x+ E3 @! A( \
modelSchedule = new ScheduleImpl (getZone (), 1);1 m6 I& S* H9 _) z( p3 m( i
modelSchedule.at$createAction (0, modelActions);
& T" s8 D+ c6 h* b/ o d2 a( S, x' o* S8 E* C
return this;; i- |! d8 L+ I, y, ]# g
} |