HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 f% z9 a- {! N+ Q5 P
* P% g1 ~, t6 C" B2 f public Object buildActions () {
- ^4 b, P; z9 e. Q$ Y; n super.buildActions();9 J8 G: C& U3 p" {* [
2 U7 W2 J- Q, O8 K, U // Create the list of simulation actions. We put these in T: E( f0 _# E5 v+ R6 p0 {2 X
// an action group, because we want these actions to be0 J, \3 f' K: _4 t' V: R
// executed in a specific order, but these steps should. G! P ]6 j3 F$ Z; C( |
// take no (simulated) time. The M(foo) means "The message4 @- H) p# P+ e4 G
// called <foo>". You can send a message To a particular
3 T" c0 H+ q9 t // object, or ForEach object in a collection.# K5 o' H0 m n1 C% m5 Y
" [9 P0 V1 u; y. U# f7 E // Note we update the heatspace in two phases: first run
1 s/ q( I& F* f4 t2 e& [+ Q // diffusion, then run "updateWorld" to actually enact the: w* l! C- T Z6 V
// changes the heatbugs have made. The ordering here is
/ g' c" V/ w% Q/ A' W // significant!! V. l$ N, V. d! |$ Y# x$ t
! K( d/ \. ]2 R
// Note also, that with the additional
X) f- P0 T* \ // `randomizeHeatbugUpdateOrder' Boolean flag we can/ a+ B7 v3 A. g# {1 w
// randomize the order in which the bugs actually run
5 _0 @7 z2 F* v' M // their step rule. This has the effect of removing any" n7 ^# D8 Y \
// systematic bias in the iteration throught the heatbug7 y2 ]- F! G' s5 z# K; {
// list from timestep to timestep
}) R+ ]# Z9 g, ]$ n& D$ `. x
3 U' `! w+ r. P- y$ m: Y // By default, all `createActionForEach' modelActions have
: n$ X2 L( v% r // a default order of `Sequential', which means that the
8 p; t5 ^! O `) ~ // order of iteration through the `heatbugList' will be2 Y9 D- ?) e+ O
// identical (assuming the list order is not changed
2 S* e. J+ l. [* n, v' Y- N; E // indirectly by some other process).. ~* O1 K0 O$ b9 |8 l/ a+ c4 S7 Y1 r
# |4 e% G; Z% c4 q4 v6 H5 A. w
modelActions = new ActionGroupImpl (getZone ());
8 U* O1 }, S) r1 R
2 p7 l3 Q& V, @+ I, | try {' C% E g1 M* J1 `( r! i
modelActions.createActionTo$message
b0 V* F+ d* c7 Q0 ?; i. A4 O (heat, new Selector (heat.getClass (), "stepRule", false)); v+ k, G. D* J2 T- x+ I
} catch (Exception e) {
) |: J) k1 l, h: | System.err.println ("Exception stepRule: " + e.getMessage ());1 s4 ~0 @8 F: X) i0 a6 U
}/ [3 D; @& V( k1 ^9 E
, r7 U4 j& e1 o7 ~& O/ c. N# z try {
N' n0 v M6 Q7 K* m9 H4 q Heatbug proto = (Heatbug) heatbugList.get (0);
- C: k Z: {; i! L3 z! R$ L" s Selector sel = ) c( K6 x; @7 M; x, }. |3 x L
new Selector (proto.getClass (), "heatbugStep", false);0 f3 {* v* I$ v, l8 x- }
actionForEach =/ w7 ?9 h/ R* i9 A
modelActions.createFActionForEachHomogeneous$call
3 i# D8 n# y9 G. i+ |' G; t4 | (heatbugList,0 S( Y% I0 S1 W( d& k5 f2 o. ^- [2 P. r. a
new FCallImpl (this, proto, sel,
& l0 y* w' b4 V9 O1 q7 Y( d- l new FArgumentsImpl (this, sel)));; Y2 m. G h7 l4 u1 x" P& D
} catch (Exception e) {0 x7 D% ?& U/ l- o4 j
e.printStackTrace (System.err);0 e0 R0 j, A2 y$ Y
}2 s4 T2 p, c9 p: O- D
. R, L) _/ {+ U1 f' A, }6 t, M syncUpdateOrder ();
% ]' N5 d; y, _ S# |3 U' r+ _: U. y' h# g7 h/ }. O
try {
# ?) d+ ?1 Z2 p* E2 s& F3 W modelActions.createActionTo$message
5 t! }. V" z/ F6 d. L (heat, new Selector (heat.getClass (), "updateLattice", false));
4 V4 J/ b7 V: C# ~ } catch (Exception e) {
% b4 L+ e1 i* n$ R# H/ Y2 x* @ System.err.println("Exception updateLattice: " + e.getMessage ());- N) `( |3 U& T2 B' s) |" |) `
}9 |4 V' \# }0 Y1 N" D) {3 ^: U( |& d7 L
$ ~% |" \9 O- \" Z: c) u" k
// Then we create a schedule that executes the- J& p, n3 S; w3 g4 [
// modelActions. modelActions is an ActionGroup, by itself it
* g& ~0 Y6 M* p6 W0 G // has no notion of time. In order to have it executed in
0 V; O" [ D6 z! j4 h' u( j- Y, f // time, we create a Schedule that says to use the L% @0 s/ E& q& Q
// modelActions ActionGroup at particular times. This
4 P% ], I/ p8 {4 C2 Z# b" Y3 B // schedule has a repeat interval of 1, it will loop every5 x6 Q! t* f+ s
// time step. The action is executed at time 0 relative to' S3 L8 N2 s1 D% e) g. m
// the beginning of the loop.8 R" M; s" l1 }, i% A6 k
, l$ m! J) N9 T8 }9 S L/ d
// This is a simple schedule, with only one action that is4 j, H" j. _+ e9 I- e2 e5 ?1 K' s
// just repeated every time. See jmousetrap for more2 R8 g# ?- @ t5 o# \; k; s
// complicated schedules.
, Z" i9 _ U/ K7 I5 V 0 {4 w! ]3 m9 \; b: ]# E
modelSchedule = new ScheduleImpl (getZone (), 1);
; k( R0 M3 A, d modelSchedule.at$createAction (0, modelActions);
( k0 [) D" J: i( i/ G
! w- a# l O- n" a7 w2 d return this;
$ b: z$ L3 h2 S, @& } } |