HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* e) @& }6 i7 P5 f( i9 |. v; u' U0 `8 B/ T
public Object buildActions () {
* X6 @; q4 ^* a" [( A super.buildActions();
. l% ~; U0 ~! s5 B
, u# R! ?7 ]2 l% s9 s // Create the list of simulation actions. We put these in
/ G8 W; F* L& R! G$ W) o // an action group, because we want these actions to be
n8 ^: `% L: p, v& { // executed in a specific order, but these steps should
% t8 `7 V! _, p9 \+ |9 { // take no (simulated) time. The M(foo) means "The message
: a( w% v) j) O6 z7 F | // called <foo>". You can send a message To a particular8 ^6 j: t/ I& d" q; S7 a) ^2 t' a! f" J
// object, or ForEach object in a collection.* `- b# |7 c N6 J/ r% C2 v
# k' g6 t$ z& I! ~: h" Q
// Note we update the heatspace in two phases: first run4 v: X% z0 A9 I
// diffusion, then run "updateWorld" to actually enact the e7 \3 M0 `4 [9 O" u
// changes the heatbugs have made. The ordering here is
) \1 P7 q4 G d/ N3 ^ // significant!
7 ]! g# p/ P& z
; _- ^- k! H2 N% C+ k& E // Note also, that with the additional
/ M" T0 a8 f5 b( U8 y( u2 [ // `randomizeHeatbugUpdateOrder' Boolean flag we can5 @6 T' M$ O# C- v
// randomize the order in which the bugs actually run5 Q! S. Q7 f& C, Z3 e5 f2 Y
// their step rule. This has the effect of removing any% \ L- H8 U9 f- _& I* I
// systematic bias in the iteration throught the heatbug
9 T& n {' C. W6 k* K6 A! Y0 H6 W // list from timestep to timestep0 W: S! r" R) N3 _* u
3 q2 o" p2 R& B! P7 M+ c/ R // By default, all `createActionForEach' modelActions have
- p* p+ U2 Y& s) f* j // a default order of `Sequential', which means that the
( ?5 d, H$ k: A7 N3 X6 { // order of iteration through the `heatbugList' will be
9 N7 B1 R5 |& u // identical (assuming the list order is not changed y! ]9 e# g7 P+ f4 b/ f: z( N
// indirectly by some other process)./ S( a; m% P4 S0 `7 i- W
% {, k0 H5 \6 L9 b
modelActions = new ActionGroupImpl (getZone ());1 C6 b7 b, {6 ~& O6 n4 F; N6 v( z
, ]& h# Z$ z$ b try {/ Z% [* J, r ~0 b; a5 g, E% E
modelActions.createActionTo$message3 W7 H3 l0 |! M- l- W W
(heat, new Selector (heat.getClass (), "stepRule", false));. X% W t9 l. q& O# ]
} catch (Exception e) {( E8 g$ M; f0 c
System.err.println ("Exception stepRule: " + e.getMessage ());- ?5 _2 p. j* H/ Q
}7 r' h& N6 v6 ^+ y; M4 x" g$ e
6 G: _' p( X; T/ p8 e% H5 Q, \% d try {: m T. Q: u K- i) D
Heatbug proto = (Heatbug) heatbugList.get (0);
6 {* t- v* p# J# t2 ? Selector sel = 1 c% {- Z, u# z: _
new Selector (proto.getClass (), "heatbugStep", false);
- P, A0 `5 j% @* } actionForEach =
A. S' _0 e! t5 P/ i; ^ modelActions.createFActionForEachHomogeneous$call
' o' Z$ e5 @8 s% k (heatbugList,, @5 R# M; ]2 S" ?! c7 v
new FCallImpl (this, proto, sel,. `0 |* |: j6 n8 e5 F# a, ^- r
new FArgumentsImpl (this, sel)));2 F6 ]7 l2 `: V% Y' m. S6 g
} catch (Exception e) {0 R; E! C1 [7 }( t! _
e.printStackTrace (System.err);
8 g m( `- l& t! S8 P" d# A }9 n6 h, E7 b2 K4 ^$ j0 h$ t
6 b, b# h9 U7 K; e | V syncUpdateOrder ();
( x% A8 o/ A: J4 O' H3 B- l. u( J, V, A
try {9 { [$ E. w3 }3 S9 @, ]# a' I- l
modelActions.createActionTo$message
* z/ d% ?, C' |5 y4 ]: f* f (heat, new Selector (heat.getClass (), "updateLattice", false));2 Z/ q5 f1 g/ |/ [
} catch (Exception e) {
6 y% X) ]1 L' s% Q* c System.err.println("Exception updateLattice: " + e.getMessage ());
. i Y) K% n1 ?: c$ z }
+ t9 J6 `% u4 x3 x8 V+ n : r. r8 D) y- J4 E J2 o
// Then we create a schedule that executes the
& w* ~4 T" q9 m& B$ Z1 [ // modelActions. modelActions is an ActionGroup, by itself it) S0 [4 k$ L) ]
// has no notion of time. In order to have it executed in8 ^7 H. q: Z1 M" U' i P1 |
// time, we create a Schedule that says to use the2 K2 S' }# N7 ]: l/ v& _
// modelActions ActionGroup at particular times. This2 O& p3 C5 }& D5 L
// schedule has a repeat interval of 1, it will loop every
7 R9 B& `- j x4 x# E // time step. The action is executed at time 0 relative to8 j7 U E4 X8 Z! p; z7 k% T' P
// the beginning of the loop.- c7 o+ n3 i$ D0 k% k& S& A. A2 y
+ v) L3 X- [( _9 }. A2 T9 M4 V // This is a simple schedule, with only one action that is
9 _. v0 j6 ~3 N8 T6 f // just repeated every time. See jmousetrap for more" C. T- ~) j" n8 ~8 @3 e$ z2 m+ f
// complicated schedules.
6 i& w! H! B- g& s" C) ?* V
" }) T G4 p8 \" A8 u8 U1 a modelSchedule = new ScheduleImpl (getZone (), 1);
6 I+ V! _" R4 ~6 G( W modelSchedule.at$createAction (0, modelActions);% A7 ^6 Y! e* O9 |1 |8 a, j2 X
6 u1 B5 ^# w, G$ L% L
return this;
1 r$ S8 Y5 p6 I' y" N* m! f4 M" V x } |