HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, N4 _! k7 d- A, V6 n- [/ ^
8 L! p. H; k6 z3 L public Object buildActions () {
+ o# Y, }% V2 Y1 H7 m/ Z. _ super.buildActions();
+ R/ r' R: V' d* p ^( } + m& v; n* c- c) J* b# F/ s' v
// Create the list of simulation actions. We put these in6 D' U/ O) M# M+ [1 l# h
// an action group, because we want these actions to be+ y, D9 x3 h$ ^0 s& D8 ]
// executed in a specific order, but these steps should7 r* T3 N( G3 l+ d- A; B9 `9 X
// take no (simulated) time. The M(foo) means "The message
% l, Q2 ^: y) I // called <foo>". You can send a message To a particular. L+ S4 [1 k, T$ |( c# {( i
// object, or ForEach object in a collection.
' M5 u2 _, |9 h7 B
/ c1 ]4 N5 v. L7 T) s g+ O; u/ W // Note we update the heatspace in two phases: first run' F* E, J2 M( E
// diffusion, then run "updateWorld" to actually enact the
+ w5 p& F+ _ p. J& J( f- I$ K // changes the heatbugs have made. The ordering here is
4 Q* ~+ n/ c! o- d8 t, s6 B // significant!
9 c/ N9 K& }) z) Y' V: B
% a* y2 v. v( f7 b, Z // Note also, that with the additional
+ Q. Q5 d9 y; [ // `randomizeHeatbugUpdateOrder' Boolean flag we can( H# f, i+ v) m s
// randomize the order in which the bugs actually run
6 l/ Z$ P _2 c7 J: N% M1 c // their step rule. This has the effect of removing any! A# b) W4 b1 a/ d
// systematic bias in the iteration throught the heatbug
9 V7 |" ]& z( |2 p5 Y6 I // list from timestep to timestep2 m; ]+ [' T e
0 I3 u8 a, x$ N8 `, ] // By default, all `createActionForEach' modelActions have# ~( W( @, w# N+ N% s8 [- N/ O
// a default order of `Sequential', which means that the' d* ~4 [7 C3 g# N, _& ]
// order of iteration through the `heatbugList' will be& C( A( j7 r! Y F. ~) z9 ]
// identical (assuming the list order is not changed
( |+ o! S/ b9 B" m/ L, O // indirectly by some other process).
1 p( K% t0 d! Q! }4 H; Z) ?( }4 p
/ D- N( x5 F8 J& \% [; @: f modelActions = new ActionGroupImpl (getZone ());
5 H9 l9 f0 m6 |( S; L, j
, `9 j$ V. J* g7 b try {# i; w$ Y# C; h6 |: {4 n8 I9 ]4 t
modelActions.createActionTo$message
3 S- @7 \. R6 X (heat, new Selector (heat.getClass (), "stepRule", false));* F8 W" V2 d# }
} catch (Exception e) {& i! e* g. v# H4 Q& Q& m. X' S
System.err.println ("Exception stepRule: " + e.getMessage ());# t# ~- A( h& ?" g
}/ o* i, u+ e r1 u3 k! t. a
4 D: F9 m/ O% O( \ try {
# N2 h" a) x% p9 |/ g Heatbug proto = (Heatbug) heatbugList.get (0);0 ^' ^. `9 D7 @* I& c- k: Z
Selector sel =
# H0 z; n( W$ A9 D4 y new Selector (proto.getClass (), "heatbugStep", false);
5 E! Z4 U2 r) l0 ^% E actionForEach =
7 j$ c+ l8 x5 G' [ modelActions.createFActionForEachHomogeneous$call4 g5 V$ E4 I' ~2 \5 D2 t
(heatbugList,
0 C$ R% Z2 O6 r new FCallImpl (this, proto, sel,6 Z# h+ A' P9 J, X+ C
new FArgumentsImpl (this, sel)));
, |2 u; i1 F, q! p, O } catch (Exception e) {4 q$ E* l8 U- G$ L
e.printStackTrace (System.err);
D1 z, k B0 B. y) G0 k% x2 q, a: j( ? }3 E0 d1 V# [! ]* c6 ~# G
% t( M/ ~/ W! I# R* B6 @* p2 ` syncUpdateOrder ();/ \0 l% o) A1 U2 O. z4 f, y
9 ~7 S! [" a9 I0 O1 I+ i3 H/ p" N4 O
try {$ }2 u! w+ e0 t$ x
modelActions.createActionTo$message + o) G4 e7 c' ?5 `+ |3 L
(heat, new Selector (heat.getClass (), "updateLattice", false));
6 T" X. t! P2 ?- W& m+ M3 \ } catch (Exception e) {
8 t+ r; a; B1 M$ W1 M* s$ J System.err.println("Exception updateLattice: " + e.getMessage ());
) h/ K! k& q& d7 \ }4 N3 d" X* H' r. d& w! k) s
6 y% e0 k3 V" @
// Then we create a schedule that executes the
% C0 {9 \( C' d6 f1 c& I: s // modelActions. modelActions is an ActionGroup, by itself it
4 e, q9 P/ p/ H i; G# k# L* @ // has no notion of time. In order to have it executed in
- x4 T" M2 W% b! D% l# X // time, we create a Schedule that says to use the F8 q! O0 w7 A; a6 S# l
// modelActions ActionGroup at particular times. This0 K ^; ~% N4 f/ N/ E1 i# x
// schedule has a repeat interval of 1, it will loop every0 ?8 x( F4 j& n5 L% `
// time step. The action is executed at time 0 relative to
i! L# i1 C+ U$ X: Q // the beginning of the loop.. K0 c6 S# u' }* Q
1 ^ i) b* C6 z. p; B // This is a simple schedule, with only one action that is
, B. V: O1 J3 A, y4 y2 ~ // just repeated every time. See jmousetrap for more# t9 @( Y- m( H4 x( v! h; E
// complicated schedules.
& ]- r- ~- @" Q& K8 r
. ~) p4 C/ v$ j4 I( S O# L) ]5 _ modelSchedule = new ScheduleImpl (getZone (), 1);
7 D _- m7 P: L5 `: G/ o modelSchedule.at$createAction (0, modelActions);
' x8 ]# y% @, i) _2 } 4 Z7 C. e2 u8 V
return this;. a* r! Y8 g6 @2 T5 ^2 A1 ?( y
} |