HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* d2 F0 ]3 r9 E) y- v
8 @9 }/ m; l, I( P
public Object buildActions () {0 {0 U# H% k( V5 W- E/ \
super.buildActions();, A$ h" z# d. K# z M* H
8 T# T8 x# Q( a; u9 Y' Q3 s // Create the list of simulation actions. We put these in
( o1 ^6 q' L8 R: ^ // an action group, because we want these actions to be
1 Q$ y' i9 ]8 n8 }5 F# p" O% K // executed in a specific order, but these steps should
4 L s, }# H& r& `: ~" L, o' Y // take no (simulated) time. The M(foo) means "The message
% C$ l1 g# |; f4 W3 S4 `" V7 r // called <foo>". You can send a message To a particular
3 o0 \9 i. K& P9 k // object, or ForEach object in a collection.' a6 q# i6 U' b- k' Q, j
# P" U: K0 B y // Note we update the heatspace in two phases: first run
6 M7 z6 i2 j- V0 u& C% U // diffusion, then run "updateWorld" to actually enact the) j- N3 \6 S- o, z3 \, b
// changes the heatbugs have made. The ordering here is
- p, Y8 _! n& x. e // significant!& D7 p$ X% X) K4 k% h. d* @" p( d
# E+ `5 F( q1 G3 F1 d) ]. d! C( @8 k
// Note also, that with the additional
% ]: y, t, |0 ?8 C1 v // `randomizeHeatbugUpdateOrder' Boolean flag we can4 O4 Q1 G3 B; O' X2 u
// randomize the order in which the bugs actually run6 o+ c1 f& N% |0 p$ f
// their step rule. This has the effect of removing any' B6 A6 e: ?0 n3 J |
// systematic bias in the iteration throught the heatbug
6 e; D% W6 T/ c# s- ?" y // list from timestep to timestep" {& l! c h" ~
: l1 W8 I. d. I% r# E+ i7 f& `
// By default, all `createActionForEach' modelActions have
2 p& B- \5 h. i; K+ @! K // a default order of `Sequential', which means that the
8 ^0 j$ G- r" v) j3 U5 L // order of iteration through the `heatbugList' will be
% k- m9 K! h4 x0 s7 K: U/ _4 \ // identical (assuming the list order is not changed6 I0 B8 _" a2 T4 _+ A+ g3 `; ^7 Z8 e8 n
// indirectly by some other process).# i$ @; r1 \3 F: j. V* T7 V( g
: g x7 o8 Y( R8 I9 L$ K modelActions = new ActionGroupImpl (getZone ());
8 y4 m- Q6 r% ]% Z# ^2 g7 @7 D
* t4 [2 O2 L* }" K I* k7 M try {4 m( I# [, c L- D" @
modelActions.createActionTo$message
( E+ g/ j6 M. ?% ^ (heat, new Selector (heat.getClass (), "stepRule", false));) J* u f* i& E
} catch (Exception e) {
9 _. ?1 X+ o& Q+ v. h0 O* F! q: u; x System.err.println ("Exception stepRule: " + e.getMessage ());
; _ Y2 H7 c e+ Y7 ^" \ }- ] }
4 G" l) v6 l: ~# K2 B
8 W2 |: P# y! ]1 M1 H8 G4 G% g& t try {7 A! x' H. n' r; m) j8 Z8 Y. i; z
Heatbug proto = (Heatbug) heatbugList.get (0);
0 h5 n1 G( ]9 K4 i" [! h4 L0 m Selector sel =
( E' ]# C2 ?/ ~. r5 E6 L) B new Selector (proto.getClass (), "heatbugStep", false);+ [7 o: [9 H) o# Z* Y. t
actionForEach =
! `2 k6 L5 K/ D% Y1 F modelActions.createFActionForEachHomogeneous$call6 d# L! {+ u7 y0 }+ p
(heatbugList,
9 M! Y2 ?# }4 `0 J* m# ` new FCallImpl (this, proto, sel,6 W" U, r* w- M1 M0 \! b* e: Z% ~
new FArgumentsImpl (this, sel)));
6 G, e6 [# x( ~6 F0 B1 u) T0 A } catch (Exception e) {
& E# w! T. L# u9 h. Y% b7 Z e.printStackTrace (System.err);
2 o& ?6 i; u9 y" C }. z, z6 a' x: N% I2 @) Z) e A
6 h% T& A. r8 ?+ `: b
syncUpdateOrder ();
# {+ A* x) @1 Z4 Q- V
/ Q E7 g0 z/ I' J- ~+ }5 j9 E try {
8 x2 g: w8 l& {0 W5 |2 L modelActions.createActionTo$message 8 x5 D% @5 a& y/ M1 [
(heat, new Selector (heat.getClass (), "updateLattice", false));- s! U/ u% Y2 c; f- K% H' a
} catch (Exception e) {
. }/ y6 H/ l; J( z) @) @& m0 ~( ~8 P System.err.println("Exception updateLattice: " + e.getMessage ());
& E+ R0 h( \6 K }
5 C0 M$ w; ^4 W, M' L' F ; p; ^3 q0 P# C/ F$ e6 l
// Then we create a schedule that executes the9 I T, ]5 ]3 J6 A% O' \
// modelActions. modelActions is an ActionGroup, by itself it
3 P9 _; i' v {9 E, [ // has no notion of time. In order to have it executed in
( ~8 D5 a* ]: S // time, we create a Schedule that says to use the
* X$ B6 w/ K7 w; s // modelActions ActionGroup at particular times. This
( \ A* J7 A/ O% |0 G+ r0 y // schedule has a repeat interval of 1, it will loop every
& [. i3 U( E0 k3 ^1 e9 y8 r, o6 N' ? // time step. The action is executed at time 0 relative to
. z9 S, E) d" x" J0 c // the beginning of the loop.
: I& @, {5 N* q1 X, o2 H: j0 E. H& K1 l$ @0 M' [- C+ k
// This is a simple schedule, with only one action that is V$ m! U! R. O" u% c: f6 `
// just repeated every time. See jmousetrap for more
* w3 c2 _6 Y$ C1 X; _+ W // complicated schedules.
+ X; x3 f3 q5 s# m
3 i# G0 @9 T+ E6 E' Z# J6 Q7 X: T9 ~ modelSchedule = new ScheduleImpl (getZone (), 1);7 K+ P+ a7 A8 F8 l
modelSchedule.at$createAction (0, modelActions);
6 W- f |* Z: y$ r7 `' |
- Y" l' Y: y) H3 U5 w return this;6 X! y3 |. G( \2 X0 O! e
} |