HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; s2 ~- B9 A2 k& t
- @ E& p8 h3 x9 c! @, W; F9 T( @# T public Object buildActions () {
8 _1 \' T- y4 g8 d2 c3 H super.buildActions();
. B9 \' @3 k5 `- l& o/ A0 y3 L4 }, `2 b
; e' N+ D1 ^% v5 C {* ` // Create the list of simulation actions. We put these in
6 `- T2 K! X+ r' \, y( w // an action group, because we want these actions to be8 ~9 }0 K0 ?9 U
// executed in a specific order, but these steps should8 f( Z% ~( h! C o& z% L
// take no (simulated) time. The M(foo) means "The message
: C# m" ^* w. h" \ // called <foo>". You can send a message To a particular
& R6 J- O. o+ h, f6 {# ?* ~ // object, or ForEach object in a collection.
4 }9 n/ I4 s! \9 I$ K! ~$ B
8 \9 S8 N) A1 z- m1 C // Note we update the heatspace in two phases: first run
7 C4 }# T" F b8 L- V // diffusion, then run "updateWorld" to actually enact the
2 ?& m4 S9 P) f: x // changes the heatbugs have made. The ordering here is
: K5 y, k9 l/ G8 J9 U! A. n // significant!+ @/ T9 V" i6 T: X. z
) G- a$ M/ s" H0 X, f
// Note also, that with the additional
6 h# W8 \& a) x0 o! U5 S$ k // `randomizeHeatbugUpdateOrder' Boolean flag we can
4 U* l* V8 r9 T. u3 F( D // randomize the order in which the bugs actually run0 L( r7 ]) @' X r' |3 e. a3 b+ k
// their step rule. This has the effect of removing any
% ]4 k* F; Y' M! y7 \ // systematic bias in the iteration throught the heatbug
5 y2 @/ S7 q' i. U+ \ // list from timestep to timestep
: Y# A1 [1 C( _6 U% o4 u7 x; z# D ( U' n0 H8 ~! x+ n
// By default, all `createActionForEach' modelActions have
# R7 Q( x: ?5 n! W // a default order of `Sequential', which means that the* I9 H8 ]9 U. v: c2 l3 A7 Q9 d9 u
// order of iteration through the `heatbugList' will be' B- \- B1 v" Y
// identical (assuming the list order is not changed- Z7 E0 r6 P* X3 u: v# ~& {
// indirectly by some other process).
& a2 b8 O& W7 J$ V1 x+ I 5 d: u+ t# ^0 \3 ^8 a! y
modelActions = new ActionGroupImpl (getZone ());# A9 ^) ^* c m2 s- }5 U. _
( E7 n% D/ l8 J( @5 j0 z try {7 n- s6 A4 d" L; ^
modelActions.createActionTo$message8 ?7 Q. R) a4 t3 A z1 k
(heat, new Selector (heat.getClass (), "stepRule", false));3 {% g$ E% t/ r7 X7 w3 N
} catch (Exception e) {
* H+ O* E+ x* I9 @; ?; ?: d System.err.println ("Exception stepRule: " + e.getMessage ());0 u3 J* M4 j# @+ W# b5 Z
}! Z% I9 B; {! H( r
8 |; `+ A* x+ n5 ?6 w0 \7 r8 | try {
6 B d# \+ F3 a, j' R! G Heatbug proto = (Heatbug) heatbugList.get (0);8 ~& h5 o. a% C
Selector sel = " [ h6 o1 O1 T/ m8 e! ?
new Selector (proto.getClass (), "heatbugStep", false);
) N3 P; _) w/ h S/ l- S actionForEach =
% X! r) R6 [0 F4 p modelActions.createFActionForEachHomogeneous$call
# G' y0 _$ K- _' h# x+ H (heatbugList,+ k9 X+ U% u8 m
new FCallImpl (this, proto, sel,+ j7 i0 w# l. W4 `$ x
new FArgumentsImpl (this, sel)));4 ^+ W+ l$ n3 w+ c. t# ]9 r
} catch (Exception e) {
5 X9 ^0 Y& A! P# Y5 Q e.printStackTrace (System.err);
+ t% k" h/ Q! J7 Y }
+ C& i; ^: o2 o / x0 Z' M; M ^4 ~4 j% Q* \# @
syncUpdateOrder ();
; |! _* u7 ]1 f. K- h, _( R2 V1 ~: o+ @! `! P ]
try {- Y: @( U% A! @6 L
modelActions.createActionTo$message 2 K1 Z2 Z) z! j, h
(heat, new Selector (heat.getClass (), "updateLattice", false));
3 P3 i: X: x. d4 X, {3 @ } catch (Exception e) {
8 v; X- v9 g4 V$ t: T, y System.err.println("Exception updateLattice: " + e.getMessage ());: p2 R) k: ~. s/ N
}
7 T- I8 z5 F# r* d9 e" M0 h # O. C9 ~1 ?0 ^9 b2 D
// Then we create a schedule that executes the+ S9 h0 g& G% s& F7 z% X) S
// modelActions. modelActions is an ActionGroup, by itself it
1 ^! r3 y' N4 Y) p, ] // has no notion of time. In order to have it executed in
" M2 t4 W- `0 e8 `0 X; {1 u // time, we create a Schedule that says to use the T: c1 }1 t* h; x5 m( r
// modelActions ActionGroup at particular times. This
7 t( G; N5 l2 Y! J b" d/ a) F% Q // schedule has a repeat interval of 1, it will loop every
4 }/ a- k6 x, r8 m) a // time step. The action is executed at time 0 relative to
" U3 P. v. G2 m# r1 z/ J, x // the beginning of the loop.# ^1 u' K; ~, h- {
9 r4 R5 v9 F/ ?" G // This is a simple schedule, with only one action that is' g& x+ _2 M7 X/ C3 k" }
// just repeated every time. See jmousetrap for more6 I6 u# ?# R# J+ A
// complicated schedules.. X2 |; F& y& x1 N; O+ R
1 W$ b! r4 y b
modelSchedule = new ScheduleImpl (getZone (), 1);
5 M* V# x2 ^5 \ modelSchedule.at$createAction (0, modelActions);$ E7 w9 @' S" p9 g# [. P i% ?6 n2 ]
) J& N+ y1 f% [ return this;% e$ o$ L* `2 p4 ~8 `
} |