HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 |# u+ P& e6 P: H' Q: l& r
7 j# f2 B8 r2 M/ } public Object buildActions () {/ K5 t7 s! g& M" a3 Q: U8 H: t
super.buildActions();3 g; I9 W# |& j/ b3 y9 t5 ]
4 _5 @" J6 [( Q4 t9 U n
// Create the list of simulation actions. We put these in; C2 k4 M8 `' r }& ^
// an action group, because we want these actions to be
9 N" U o# ]3 ?: L, V8 C // executed in a specific order, but these steps should$ G6 H* U# e. q. D' ?
// take no (simulated) time. The M(foo) means "The message. u; z5 O* P+ s1 A* q8 Z4 u
// called <foo>". You can send a message To a particular
& E0 x/ A+ d) ?, x! u3 N0 F // object, or ForEach object in a collection.$ i' f& \& q( T+ S2 V
7 j* v4 t+ \1 d( v# o" \# I2 k; L. S
// Note we update the heatspace in two phases: first run) H7 Z9 F& e- q0 O, l& W
// diffusion, then run "updateWorld" to actually enact the% k" J; X7 C; m7 }2 p
// changes the heatbugs have made. The ordering here is
5 P2 Q# d$ j, Y$ }0 w3 F // significant!2 r4 h! K h3 F0 E" ~& S6 g
( P. J! g8 j+ B
// Note also, that with the additional6 ]. l9 T- ~3 f) E* W
// `randomizeHeatbugUpdateOrder' Boolean flag we can
$ B: E7 j. c( U# R1 U- \0 j. k // randomize the order in which the bugs actually run2 p4 s, q2 n2 o& ?7 a& t
// their step rule. This has the effect of removing any
y1 Q; ]4 [! v- \ // systematic bias in the iteration throught the heatbug
7 m% I9 E7 `2 V$ z' U+ O9 J5 s1 F // list from timestep to timestep
5 X2 a: P3 R! p$ H" H2 N
, P: c: e# a: G/ y% P, N$ [ // By default, all `createActionForEach' modelActions have) t/ P3 |6 C& p
// a default order of `Sequential', which means that the
( }0 E H) e7 x% V6 c. o: v! l // order of iteration through the `heatbugList' will be2 _" H" \, }" d- G4 P
// identical (assuming the list order is not changed4 T3 q! ?( u" \& \5 m/ J1 a9 Y$ P( o8 M
// indirectly by some other process).
4 u& S4 {0 t* B9 S4 G & y, [; p: i2 S; Q; P9 d! g# @. D
modelActions = new ActionGroupImpl (getZone ());3 K3 {, Z a" C m; n8 u, J$ Y
% \& D) [- j; A: I try {6 X5 S K$ [ `$ o, x) F) b/ i( I
modelActions.createActionTo$message
7 ?7 @, c2 e: W; ~7 N& a, Q) S* e (heat, new Selector (heat.getClass (), "stepRule", false));$ q- i1 o, }3 h2 k* p3 s
} catch (Exception e) {/ {7 s- S9 R& D* ?. z
System.err.println ("Exception stepRule: " + e.getMessage ());% `# l6 H2 t# j+ n/ U/ D4 T
}
4 e. r% r% i+ [1 w0 N b+ u
( P! o# h. z/ T2 c2 @ try {
( b% d+ x0 V: z( p Heatbug proto = (Heatbug) heatbugList.get (0);" {& s% \/ ?7 L
Selector sel =
& N3 Q2 l7 W+ d& D# i a$ n* ^5 |3 b, W new Selector (proto.getClass (), "heatbugStep", false);
8 g6 P; ^+ ] E' Z actionForEach =
6 W: |- k6 l" x* ? modelActions.createFActionForEachHomogeneous$call
' E; p8 Y+ d) r% q (heatbugList,
2 H M( {+ U( p, E8 K new FCallImpl (this, proto, sel,
4 H5 |5 [$ i7 f+ x1 t5 l5 s: D new FArgumentsImpl (this, sel)));4 G0 d% Y% p, s
} catch (Exception e) {
/ R( ]3 h/ F" E e.printStackTrace (System.err);- }, [3 C- R" s0 l2 ?- l: g
}; m$ N+ m+ y* B" X# L1 x' O
' T" O: M6 P1 B# |+ {9 c2 A syncUpdateOrder ();
; q a$ a& r) }' m" l4 Y9 a* W) m# `* L# h) F
try {0 a# V8 Y& ?# e5 k: ?/ R( f
modelActions.createActionTo$message
: _" _0 R0 |6 N5 W: i+ M V, }! y (heat, new Selector (heat.getClass (), "updateLattice", false));
/ p# }, [/ p" Z6 L. J: C* } } catch (Exception e) {& t8 f3 z3 U, H' K3 k
System.err.println("Exception updateLattice: " + e.getMessage ());
$ i$ A% n5 W4 z: a+ U4 c }
$ a: h/ I0 g" C' v4 a' H
5 q) f+ I0 x: A9 B // Then we create a schedule that executes the" k& |7 [' ] O# N" G+ k: j
// modelActions. modelActions is an ActionGroup, by itself it
* b8 d2 p2 E" ?- k" a // has no notion of time. In order to have it executed in, D; f3 V h( p* c! z9 ]0 N
// time, we create a Schedule that says to use the o+ d; ]0 ^* A$ L. Z# a0 B
// modelActions ActionGroup at particular times. This% l, t. k3 w: b
// schedule has a repeat interval of 1, it will loop every
" a) }. d. `: `1 U; v! ?, l* [ // time step. The action is executed at time 0 relative to
$ ]9 x' N* |" K3 A5 H2 R // the beginning of the loop.) V) L4 e1 l$ F. t3 f9 \
2 z! L! ]6 g% v- ~! q // This is a simple schedule, with only one action that is% V8 u. @! v/ c% l( o# O
// just repeated every time. See jmousetrap for more( x3 _ `5 A6 d3 t2 W" ^! x
// complicated schedules.! W% }# i$ r* t
' ~$ r& ~4 i, x$ B5 t, s8 _
modelSchedule = new ScheduleImpl (getZone (), 1);
- u- O* K8 V7 i1 a% o' g+ v& o modelSchedule.at$createAction (0, modelActions);
5 n$ ^0 F% K: R; w' I5 I 0 F& V" M: k" v- x1 v/ f8 g) E
return this;
3 d. m* ?" }0 H! G( s1 t2 H } |