HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; K: V. Z$ C7 ^; e3 b9 S7 f; ]& q# @' Y
public Object buildActions () {
( S c: H1 q3 ^/ _; f1 b super.buildActions();
8 j6 p" a* V' B
& X7 O5 I% F8 ]$ h // Create the list of simulation actions. We put these in* P4 a) B- ] }# F9 a/ i" t
// an action group, because we want these actions to be
9 S$ Z E4 n' m' U6 T* H, J" h* I // executed in a specific order, but these steps should
3 N; Z7 _/ F8 ^ // take no (simulated) time. The M(foo) means "The message
/ K# [. ^5 `' J, J1 A // called <foo>". You can send a message To a particular
, [, s! T' J5 J; Y& \& O // object, or ForEach object in a collection.
3 T3 T& p+ X8 {9 |! m. }4 S% D
) i) z) s6 S6 b8 U9 c. c$ L; g // Note we update the heatspace in two phases: first run
" z/ ^* ]8 Y- A // diffusion, then run "updateWorld" to actually enact the
6 A+ j% ^2 G( }6 A // changes the heatbugs have made. The ordering here is
5 N6 c, U; c& d! [* C // significant!
1 y c2 l, f( b & p" o6 D+ x. U$ }" Z
// Note also, that with the additional7 X" \$ ~0 @$ d8 m+ r
// `randomizeHeatbugUpdateOrder' Boolean flag we can& R. l3 m, F5 H0 R, L- R; S
// randomize the order in which the bugs actually run8 w% l$ |. y+ K% g4 U! _
// their step rule. This has the effect of removing any
% b- l) }8 d4 `1 F! }# W; {% X // systematic bias in the iteration throught the heatbug0 c3 g$ Q; R. \1 p
// list from timestep to timestep
8 Z; ^8 M1 u: J" x4 L
) p S: K$ V2 h+ a5 } // By default, all `createActionForEach' modelActions have
: |6 E8 v( U0 b- Q$ o$ {. H. W // a default order of `Sequential', which means that the# N/ w5 f% l3 g# \" w$ I
// order of iteration through the `heatbugList' will be
9 Q6 Z# S6 T5 D& E0 g // identical (assuming the list order is not changed* c$ f* Y5 N4 c" ^
// indirectly by some other process).6 Z) A }$ ~0 W! h& _
. P" P3 G( E. Y2 ]9 L4 i, C5 S! W4 N modelActions = new ActionGroupImpl (getZone ());- C$ b* w3 u: E8 S
; r) v2 u5 H' O0 [/ P/ O0 D% M. N try {5 O( I5 g5 e4 A& ~
modelActions.createActionTo$message# _, z& Q0 s5 J! d
(heat, new Selector (heat.getClass (), "stepRule", false));4 u. s1 J/ d) V8 N L3 P: m
} catch (Exception e) {$ r! h/ Y% i9 F r
System.err.println ("Exception stepRule: " + e.getMessage ());
U: a' Y: u* g( j( k }
: @" w- A) ?& E3 `7 H8 |( L2 K( G& z( y, A2 {+ a2 |* m, P4 t# y; Q
try {
0 G: B L! J; G( t Heatbug proto = (Heatbug) heatbugList.get (0);# W2 ` T( p6 y
Selector sel = 6 o) c5 u: L2 i' C% F& p# _ n+ z9 \
new Selector (proto.getClass (), "heatbugStep", false);1 \/ k! M# _# h, F/ N4 B6 \
actionForEach =& ~: t$ r1 }* k. T
modelActions.createFActionForEachHomogeneous$call/ N# Z# g+ x! `: k2 w; m4 b
(heatbugList,, p) o' |# P' L4 i: M7 X# p
new FCallImpl (this, proto, sel,
. r( A) X- G7 o* k& Q h new FArgumentsImpl (this, sel)));
; h1 y& e; v6 q/ x$ k } catch (Exception e) {
5 U" f- x/ C% H# y$ k e.printStackTrace (System.err);
_4 M, N) B! |, W }
: i3 ~! p' N$ ^* }+ S
$ B. r; ^7 v/ D7 i syncUpdateOrder ();( g3 s( J% r6 @: P* B/ i
$ B- o2 R$ \9 K2 R4 u try {
) H# k% E' [6 e" P2 W# P& x! Z4 b modelActions.createActionTo$message 8 R' O/ H; X$ W0 P: Z F
(heat, new Selector (heat.getClass (), "updateLattice", false));4 t# s) Y; N' N2 p7 {
} catch (Exception e) {
3 p2 Y6 W7 N7 a% P. m: R System.err.println("Exception updateLattice: " + e.getMessage ());
% D6 f$ M4 K, h8 k6 w }! N. d4 F& H8 V. x7 k
c. E- L" K) e: k' e- ?4 R // Then we create a schedule that executes the/ v, ~$ J+ F* j$ B9 s- }
// modelActions. modelActions is an ActionGroup, by itself it
. [# s& X5 R& X- W' Q // has no notion of time. In order to have it executed in% F* z2 |: o% h
// time, we create a Schedule that says to use the, _: ~" M* g: D9 |$ ~3 ^/ k
// modelActions ActionGroup at particular times. This
_5 ?; X, k) P' p, m // schedule has a repeat interval of 1, it will loop every
) B. T" j T3 k( c5 n // time step. The action is executed at time 0 relative to$ S. `8 t* Y7 M4 d' q6 a' l& W; [
// the beginning of the loop.
9 @' }% d' q$ Y: F( T {+ k7 G. s/ Q4 N+ y& x
// This is a simple schedule, with only one action that is; T" s' g, A0 {1 b$ s9 ?8 K
// just repeated every time. See jmousetrap for more& W7 a2 c& o6 @2 V" T& i
// complicated schedules.
6 [# Q2 K4 ^, _8 v4 v ' q3 P6 T& d' L0 {' o o' q. m, _ c
modelSchedule = new ScheduleImpl (getZone (), 1);
. A9 F2 R8 G. O' l9 E7 o4 [; g modelSchedule.at$createAction (0, modelActions);$ w G% _* o0 s# c) X
; i) k6 g# c; _, a3 {/ c3 o return this;) E, i: C+ Z9 V- p9 _. U7 x: L
} |