HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. L' e. s6 \5 B% O3 @0 O) f
+ t, P6 g. ?" c/ x5 v+ e+ q) E
public Object buildActions () {8 s7 l2 }. E& [3 f( s; _0 G
super.buildActions();
1 Z7 K8 @& X0 c; u9 w; v
! [ u7 S% U, |$ e // Create the list of simulation actions. We put these in6 z. I3 z: Q! N3 a, g) e* }, C: `
// an action group, because we want these actions to be4 M$ G6 E/ t. R" I) i2 ^
// executed in a specific order, but these steps should
) A8 @) L8 p& V3 D. K // take no (simulated) time. The M(foo) means "The message4 b9 x1 g( r7 a2 f0 \
// called <foo>". You can send a message To a particular6 V! w6 O& n. x
// object, or ForEach object in a collection." w4 ~# O) u/ ~7 N
7 G& C3 G; G; a! `. m) H. c
// Note we update the heatspace in two phases: first run
# N( l3 A O1 f# \, N // diffusion, then run "updateWorld" to actually enact the
$ K6 H8 |0 P) e1 ?6 P // changes the heatbugs have made. The ordering here is0 {4 v7 r9 P0 z7 t* Z
// significant!4 Z M" Q1 L0 C8 i+ _. \4 R# w% a/ b
+ o- C3 I, R ]! W3 P3 R7 t: t% l- H
// Note also, that with the additional
) @. p, D1 y8 L2 s6 @: q1 W // `randomizeHeatbugUpdateOrder' Boolean flag we can
: N/ {! p, |: k! V& h // randomize the order in which the bugs actually run
: g! ^% G# o* E" }- R2 o* F // their step rule. This has the effect of removing any. _" |# W; |1 P9 _( X
// systematic bias in the iteration throught the heatbug- n( O5 k) ]* O; f$ { ~
// list from timestep to timestep# `* k! l* h$ ^6 D* E" V! j
: i* z8 U" M6 i% ?4 ]2 z& W
// By default, all `createActionForEach' modelActions have, f1 B$ n, ~2 V& _( n8 p' b
// a default order of `Sequential', which means that the$ z% l9 }9 f5 {0 R2 w7 Q S* W! m# U
// order of iteration through the `heatbugList' will be0 p# Y% X# T$ L K- ?, |
// identical (assuming the list order is not changed2 v+ O. ?, D# J& B w
// indirectly by some other process).
3 E2 M1 e6 H( m' y! g2 S7 r9 C' ? 9 x' J, g! k% f/ B
modelActions = new ActionGroupImpl (getZone ());5 U, O, D$ F% s# l/ R/ e2 X& [
, n( L$ z" m' U2 \ Y$ k
try {( {( j/ P$ _9 ^! F
modelActions.createActionTo$message
M+ w2 l3 L0 d3 K (heat, new Selector (heat.getClass (), "stepRule", false));
4 M( Y! w) i! D: \7 o } catch (Exception e) {
3 p& e& k7 q6 S+ u System.err.println ("Exception stepRule: " + e.getMessage ());
L7 n' f# m4 n3 U( f& ?. J }
- z& G7 `% ]8 |4 {' [* C' d# F% s* {8 \4 C) |; l8 D
try {4 t/ z+ @3 w6 V, D) W
Heatbug proto = (Heatbug) heatbugList.get (0);/ w* w' K3 k' m) `2 t5 c
Selector sel =
8 n- \) D ~, }; R: D( _ new Selector (proto.getClass (), "heatbugStep", false);
/ u7 H& D z7 Y. j5 M actionForEach =
* T T9 N% U" s" B; i# K2 a7 c0 m modelActions.createFActionForEachHomogeneous$call
! T; O$ n0 Z6 j" f; F, Z& y4 b (heatbugList,
7 j' z) D+ @% K# N J" A: ?) w new FCallImpl (this, proto, sel,7 w- f/ k% U- m" K
new FArgumentsImpl (this, sel)));
; f, k8 s3 I5 o3 G/ N } catch (Exception e) {( g9 O X h, }
e.printStackTrace (System.err);
7 @& m4 v4 R1 r }
) y1 X" `8 P# q) `1 g$ D
' M7 K- `, c2 T. P syncUpdateOrder ();+ K% ^2 W+ {# C& G4 r
3 K! x. X9 v! n% I3 i try {
6 Q4 W: e& k4 } modelActions.createActionTo$message
+ F; w5 Z+ v1 i (heat, new Selector (heat.getClass (), "updateLattice", false));, l% M; E8 J1 U! v# \
} catch (Exception e) {6 r0 r) m( c0 R$ ]
System.err.println("Exception updateLattice: " + e.getMessage ());
_4 e: t$ q* G# s4 U# u7 q }( `. E. d3 g3 S
# [7 a$ t. q/ w0 z9 B/ j& t. j // Then we create a schedule that executes the: v! z7 h6 ^5 X! }2 u8 D. F
// modelActions. modelActions is an ActionGroup, by itself it
6 Y" c6 k- o7 u) k- G c! q1 V // has no notion of time. In order to have it executed in( d- p0 c. t; a, E
// time, we create a Schedule that says to use the
. {' |7 |" F3 C // modelActions ActionGroup at particular times. This
+ Z' n1 d- D( f" E0 f- R/ ? // schedule has a repeat interval of 1, it will loop every
# D0 D E) q; S // time step. The action is executed at time 0 relative to$ H7 v6 {6 t/ S$ P- \# c
// the beginning of the loop.' D4 L. X- K. Q0 Z
/ h+ o( c |! D$ w! A
// This is a simple schedule, with only one action that is/ }: |/ P. K+ i4 E+ F
// just repeated every time. See jmousetrap for more c$ g5 _1 c7 A. n- @
// complicated schedules.
* L/ J2 s1 | @; `5 V
& c1 t5 W$ P: F3 s modelSchedule = new ScheduleImpl (getZone (), 1);# Y: @( Z- w( p* @1 H- A; N+ _* r9 v Z6 z
modelSchedule.at$createAction (0, modelActions);, J6 g0 e2 j: t
" ? D7 G; @7 r9 w
return this;
" A. Y3 @4 ]& u4 a4 p } |