HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. a9 T9 S% J2 s0 @
- ^8 ]& \ V! @( n! U# Q( V- W public Object buildActions () {
m* x0 L6 o' P9 {5 |8 W% z7 U super.buildActions();
$ d* D/ Y" X- o7 B9 U3 U 6 |1 J8 [& y# q2 d/ J. _
// Create the list of simulation actions. We put these in
9 l3 A$ K2 x; t0 z$ _/ p5 t // an action group, because we want these actions to be
# V2 o- \0 c7 V% T // executed in a specific order, but these steps should
% c: ]* e) R2 k; i# ?1 M // take no (simulated) time. The M(foo) means "The message
1 }+ i0 p) }5 J8 p' C5 t5 q // called <foo>". You can send a message To a particular
% Z8 H' z" T) Y( J9 X$ O% L // object, or ForEach object in a collection.
9 O6 M: Y6 e- D) d+ ~3 F1 U, P
. @# r9 n( H3 X; ]4 v w8 K! C% { // Note we update the heatspace in two phases: first run" s0 \7 q0 Z. x# h0 t& P4 m- k
// diffusion, then run "updateWorld" to actually enact the+ p( S# K/ C4 V! d$ n1 ]
// changes the heatbugs have made. The ordering here is: k+ C) J( P3 Q( ^/ N3 {
// significant!4 o* ?% O1 O! j \/ w) {5 X* `% I
2 H! P% ?0 g2 y- ^2 k" I* g // Note also, that with the additional
& ?4 V9 O) d# M. c; e // `randomizeHeatbugUpdateOrder' Boolean flag we can% X8 K3 \& W' N3 ~' g; P9 i2 ]5 ~
// randomize the order in which the bugs actually run
6 N4 v. c; \; A7 s5 u$ n1 z // their step rule. This has the effect of removing any
, U. @$ E; {: D; P# v F7 I c: X // systematic bias in the iteration throught the heatbug
* f$ c _' l" U( i% y // list from timestep to timestep6 @- X6 g& r! g* {+ b0 ?; o
. N9 \8 y1 N' p+ @$ I' _
// By default, all `createActionForEach' modelActions have
+ y8 `6 u: N/ u! N* {7 y" | // a default order of `Sequential', which means that the
! S) Y# G( Q+ u // order of iteration through the `heatbugList' will be( t7 E6 M% ~7 g2 I% |. s" o
// identical (assuming the list order is not changed
. h0 h8 ?+ ~4 G4 Z% o0 f$ ~. r; J& b // indirectly by some other process).
0 z# y+ [+ n7 I7 `- ^, X- L( b7 m
$ a% P9 q% ^; c' [$ z/ ~+ J+ E modelActions = new ActionGroupImpl (getZone ());1 {0 @& |+ {5 }( d4 i7 t& p
$ K+ \4 S* C: H: Q) c+ a" K" E try {3 R" P8 C# A/ W; F+ e. ]. W
modelActions.createActionTo$message1 }3 K9 i/ N9 M$ `* v
(heat, new Selector (heat.getClass (), "stepRule", false));# Y, }# J# a8 y/ r8 L: W" Y# U
} catch (Exception e) {& d) z- p) i. U( m0 a
System.err.println ("Exception stepRule: " + e.getMessage ());$ q5 [+ w3 ^5 y) I7 u& k2 O* x
}
2 Y/ i% h5 b, v' T( ]- A9 Q: s/ l# L( p( ~) ~, b8 k" @3 a( N
try {
& t m" n) G% O6 _. L$ y$ O0 V) t Heatbug proto = (Heatbug) heatbugList.get (0);
9 w& w' N- P- L. X" C h Selector sel = " t: C$ D" b8 j( v% i
new Selector (proto.getClass (), "heatbugStep", false);% U4 p h% m& E# A, L+ M6 Y. ?
actionForEach =+ _. J+ w3 j: w- s7 Z* J
modelActions.createFActionForEachHomogeneous$call. l% O. q. }* B+ N2 A$ i
(heatbugList,4 h9 G6 H k/ G! w& J% E, {) H
new FCallImpl (this, proto, sel,; \2 K- ^) A$ d/ u; h5 x- C% F" m
new FArgumentsImpl (this, sel)));
" p J& W3 \+ G; \ } catch (Exception e) {1 ]6 n* H& ~9 X
e.printStackTrace (System.err);
# y6 \# W# J+ B# D; Q5 q/ A }
! Q, Z j, b7 L1 Y# H4 B; V
4 d* n5 k. l8 `" ] syncUpdateOrder ();
+ e* f' N# M+ ?% n: k
" t. ]7 l2 O2 U) i, x try {7 R' |0 s" Y' s1 X0 c% i
modelActions.createActionTo$message 2 }: y! G% R3 q3 S. O7 g. Z
(heat, new Selector (heat.getClass (), "updateLattice", false));/ j0 R! U; j4 k3 I g) I* f; ?- k
} catch (Exception e) {
; O# Q: v3 z+ O+ N1 r' I System.err.println("Exception updateLattice: " + e.getMessage ());" K, \8 q) X8 t1 R' ]
}- r7 `2 m$ M. s: W- z2 M
- k" f; d8 P5 M+ A# o' C% ~" Z // Then we create a schedule that executes the" ^. \# J! q: S) o+ ~
// modelActions. modelActions is an ActionGroup, by itself it
b1 x& T5 \5 P6 X) s3 s8 T5 Y4 Q7 ] // has no notion of time. In order to have it executed in
: K9 }6 v" A8 @' W3 L$ { // time, we create a Schedule that says to use the; d ?" m2 e1 ^9 R) l. ?/ M
// modelActions ActionGroup at particular times. This, S4 D; i" v! K6 N
// schedule has a repeat interval of 1, it will loop every5 h' t4 z. G0 Z- h3 x1 O
// time step. The action is executed at time 0 relative to
- t% q9 G- D' y2 H // the beginning of the loop." o( ^, ^4 }: [- J$ w' a
7 P, q$ U; ]' t7 f
// This is a simple schedule, with only one action that is
$ ~7 M5 t1 P9 I! N6 }0 H6 f // just repeated every time. See jmousetrap for more4 s. {* f/ S3 T; n
// complicated schedules.
, X. B6 T7 s9 Y- V ! H0 ^; [+ \3 P \( h6 M2 J
modelSchedule = new ScheduleImpl (getZone (), 1);- s8 E! s+ a3 r' |' c
modelSchedule.at$createAction (0, modelActions);5 p) h1 J9 M+ g3 Y
7 {6 |5 w6 Q3 s% O Z9 c
return this;- T# t7 } f: |( J
} |