HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: `* y+ ]: y; u1 w9 U' d* O
2 J, b, T2 R0 K
public Object buildActions () {
: [! N- C' u' V! `1 K# c& A+ ^$ X super.buildActions();: d# q8 V. b& }* h8 c
; r( n, j$ q5 r/ } // Create the list of simulation actions. We put these in/ Q+ s' A+ |- x( v, d1 ]5 J
// an action group, because we want these actions to be( ], a; F' q W3 ^- R# P& ?
// executed in a specific order, but these steps should
. d1 H9 f& M, J0 w/ O // take no (simulated) time. The M(foo) means "The message+ y1 S U" w6 l; `: N" n
// called <foo>". You can send a message To a particular: ?1 |! t6 {( l- n+ d( l2 p+ q5 r
// object, or ForEach object in a collection.
4 E, P% } I& \ P / i3 D' | ?+ `; Y4 V
// Note we update the heatspace in two phases: first run9 V- A1 Q5 f4 d8 g: i& ^3 ?% S
// diffusion, then run "updateWorld" to actually enact the
u g0 l2 I9 e# B" N' j! G: r5 r, l // changes the heatbugs have made. The ordering here is
- b5 o* _0 c; A o8 Y. h. ~: U // significant!: |* e$ z5 ~% q4 ?$ z
: w2 R$ g4 n. }5 R
// Note also, that with the additional0 F9 `) x; l, @# V1 U$ Q9 j
// `randomizeHeatbugUpdateOrder' Boolean flag we can$ u ^/ K' W6 [. I8 H5 L
// randomize the order in which the bugs actually run
4 Q9 F g+ C" h // their step rule. This has the effect of removing any
4 V6 h# _' g" X // systematic bias in the iteration throught the heatbug
, x0 d# e" @; R! L7 w$ R' g* M // list from timestep to timestep7 l1 z- B! l2 d1 O. b9 H
9 p: A/ R. o$ }$ b/ c$ m% W
// By default, all `createActionForEach' modelActions have
& Z) `# W( f5 y: K- N% d* l // a default order of `Sequential', which means that the
" q! ~6 h7 H# [7 d; A$ I+ U+ h // order of iteration through the `heatbugList' will be
% Y4 w3 \ m' ]/ o" \+ `4 Z // identical (assuming the list order is not changed- D; t$ s) M2 R1 L( p5 i
// indirectly by some other process).
! y: g2 Y0 _$ n6 {4 E
$ x" F8 u& E0 p4 Q9 B1 t! m modelActions = new ActionGroupImpl (getZone ());
" Y& z" u$ g9 n6 s3 h, ^& u: C+ O% e" u' @/ v7 _
try {
* ~+ Z. d$ {5 P7 V! ]$ t! z' X0 M modelActions.createActionTo$message
- C8 m* N# J5 x: I6 R- ^1 f (heat, new Selector (heat.getClass (), "stepRule", false));; l6 G2 b0 ?. i! m
} catch (Exception e) {3 F5 \2 T2 @3 K, i# w" T
System.err.println ("Exception stepRule: " + e.getMessage ());
, U6 ^% y L$ Y1 a }
% H; i( I* K. e8 |2 t
: C, o( h% @- d8 Z) { ^4 ~0 } try {; K P" I0 G/ y0 k1 e7 M) k: }% f6 f
Heatbug proto = (Heatbug) heatbugList.get (0);
* t2 Z- ]3 r& b& G; _# g: } Selector sel = , z _5 T9 J7 `
new Selector (proto.getClass (), "heatbugStep", false);
1 J. K. k7 c9 |. c, D actionForEach =0 B! V8 w. _8 C; f: ~/ \
modelActions.createFActionForEachHomogeneous$call
4 k) ]1 Q8 a& I (heatbugList,
6 I" I) u( T9 g3 ^ new FCallImpl (this, proto, sel,3 R+ S& @$ g1 M* ]
new FArgumentsImpl (this, sel)));
! C3 k0 {; @' r+ A6 N. U! \6 P! d$ w } catch (Exception e) {$ r. g7 O/ y! e; \# V
e.printStackTrace (System.err);
- X& d; t0 } H/ T }* ]$ o. x \. g0 t t
# b) a; o, {6 ?: i6 b; D syncUpdateOrder ();7 @8 |5 O; A6 I$ J: Q) l2 S8 w
6 Y) F# E) Z- P) G0 W try {( c0 S8 l+ I' H
modelActions.createActionTo$message - L, F) C6 \4 D
(heat, new Selector (heat.getClass (), "updateLattice", false));9 `) w1 h4 R$ w/ ]7 H
} catch (Exception e) {
+ E3 ]9 @' Z. n7 h' T% l c System.err.println("Exception updateLattice: " + e.getMessage ());, ` I" c" y4 @0 a
}
$ c& t; q- G! T) D# x2 r 5 S" u2 ~( ]9 z8 B% ?3 m
// Then we create a schedule that executes the) }4 S! I3 K8 q
// modelActions. modelActions is an ActionGroup, by itself it# w$ }! m2 m8 ~" Q
// has no notion of time. In order to have it executed in0 W) n) |; }; u z7 e$ S: M2 I1 `
// time, we create a Schedule that says to use the
# m3 C' m$ p% k6 f/ O F // modelActions ActionGroup at particular times. This& z# B% x" t, N9 V0 \9 F+ u
// schedule has a repeat interval of 1, it will loop every B" n" e) ]' u
// time step. The action is executed at time 0 relative to
8 @0 f4 q" p" ~' f$ s- b! z // the beginning of the loop.
9 D4 D4 ~" A4 ^: e! }) R
/ Q9 ^: c E& d8 ], ` // This is a simple schedule, with only one action that is" T7 N# a: a( F; x3 E' t5 S
// just repeated every time. See jmousetrap for more
* y/ ]/ I/ p: T, I. F6 B // complicated schedules.1 O( q5 o. c1 B( t2 _ S: M
, @% G+ \. M5 N; H modelSchedule = new ScheduleImpl (getZone (), 1);
* r; ?6 I3 |9 Q9 |9 j modelSchedule.at$createAction (0, modelActions);4 T7 j y1 S# j( v* O
/ r8 \4 B) f/ U1 Q' D return this;- S6 r% [) t- ?& O1 \7 e
} |