HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 ~6 i0 J0 o2 E9 O( F: C0 w3 _2 K
2 ]. K2 L4 d8 c& a public Object buildActions () {
+ n7 ?' l6 ^, A2 d0 `; i super.buildActions();5 F& ^" Z% x- c7 J# f
3 _7 o ?2 r D8 h% Q0 U. b! p% B/ ? // Create the list of simulation actions. We put these in
/ h& _6 b; r) J# o$ _. f6 g // an action group, because we want these actions to be
3 m( }4 k7 D( _' y5 X- T6 c( X) P: l // executed in a specific order, but these steps should
8 \6 s; d1 `2 ?- d1 C // take no (simulated) time. The M(foo) means "The message4 g3 V% e$ a4 F1 _
// called <foo>". You can send a message To a particular
& k7 f9 E. K# [* {! {0 F" q // object, or ForEach object in a collection.% V# R0 I9 j" @) S, I
8 O6 I2 U2 @2 n, b! r
// Note we update the heatspace in two phases: first run
Y- F N' Y8 \) L3 T // diffusion, then run "updateWorld" to actually enact the9 h% J9 P: ]. g) H4 Y) o8 A
// changes the heatbugs have made. The ordering here is
$ X6 B# b# n( |7 v# I" X+ X // significant!; Y7 h" ~ S8 N3 {! a2 q
& [4 j+ j- ^0 y7 a' D9 m1 T // Note also, that with the additional
, } z1 f# F) u8 c# }3 f // `randomizeHeatbugUpdateOrder' Boolean flag we can
3 s8 B5 s9 q1 B/ _! n) z! y2 g // randomize the order in which the bugs actually run
6 U" H; L) d6 z% H: J) N& [ // their step rule. This has the effect of removing any
! H3 T8 P% `1 I // systematic bias in the iteration throught the heatbug
) l, H9 q* P$ [# }% X+ v // list from timestep to timestep
3 I) P8 {& ^; v$ O * c2 u' j( ?3 P8 n
// By default, all `createActionForEach' modelActions have0 X! V& a! B4 X$ B. Z- \/ O
// a default order of `Sequential', which means that the: t. A& Y: z8 N' u/ S& h
// order of iteration through the `heatbugList' will be* C& ^8 b4 Q# P V$ d) U0 W
// identical (assuming the list order is not changed o# X) c# c o3 Y* E
// indirectly by some other process).
6 N& Y/ j, N8 i2 c9 i& D& c
# | K% C0 T2 i$ w modelActions = new ActionGroupImpl (getZone ());
# Z3 M/ S; g) k- k- i2 i3 S* f+ t3 H+ Y- ?6 L/ A
try {( \ ~2 t. i! a. w9 M% W
modelActions.createActionTo$message1 e# I |5 ^7 b( m! v, M
(heat, new Selector (heat.getClass (), "stepRule", false));
& q# `* I* {/ f3 P7 }. E } catch (Exception e) {
- R9 W/ s# y1 ^7 H5 v+ l* @9 i System.err.println ("Exception stepRule: " + e.getMessage ());0 j: J) B% [$ ]. Y" W
}
' `2 Y. F% F$ K9 w& L$ |+ p2 R+ D& ]( S2 U9 D8 {& F( c
try {7 c n; R- b8 n9 f
Heatbug proto = (Heatbug) heatbugList.get (0);
8 x" \# u7 D- X2 K Selector sel = W- Y1 ~, X: J5 ~! ]! f5 w
new Selector (proto.getClass (), "heatbugStep", false);
$ G5 _; W" F4 |0 P actionForEach =
2 u! X! H$ G* X/ M( u# D modelActions.createFActionForEachHomogeneous$call
K( v( K- c" W" N7 |& o: a (heatbugList,
0 y) K1 L, d$ z/ ^% W new FCallImpl (this, proto, sel,' e" y# y/ |8 f4 ~6 {" d
new FArgumentsImpl (this, sel)));; ^' K/ ^5 @6 m2 n u+ b) m8 k
} catch (Exception e) {
) U7 w* u0 l/ y# D$ p e.printStackTrace (System.err);% n0 w1 F, C2 A' f d
}
: y( k2 E; e0 G# t0 R
( G! ^9 L1 R5 L% ^- w$ G% L$ ]; o syncUpdateOrder ();# v7 p1 T7 r" D0 X( D; w
, p2 B; Y/ o V- o+ {
try {& S" v* f9 L6 l8 y4 h$ P9 [; G
modelActions.createActionTo$message , {5 d6 d) v; S; G
(heat, new Selector (heat.getClass (), "updateLattice", false));
, t& p% V9 [/ d! M$ }+ N. O } catch (Exception e) {) z1 |3 y2 _) B0 M
System.err.println("Exception updateLattice: " + e.getMessage ());
/ @( h& C- x, |' r& z; ^ }- ?7 `- N$ R2 a) l g8 l
, ^# I4 M) [7 c% D // Then we create a schedule that executes the8 }. V+ z1 K! D! y& t6 J8 c+ B- b
// modelActions. modelActions is an ActionGroup, by itself it' Q1 f: i3 G+ b
// has no notion of time. In order to have it executed in) H2 ]+ M+ V# G* X. Q: p k V) z
// time, we create a Schedule that says to use the ^+ q* S* z" h
// modelActions ActionGroup at particular times. This& u' g3 |% O" c4 D# S) d
// schedule has a repeat interval of 1, it will loop every
0 b2 `* N- A2 `! @ // time step. The action is executed at time 0 relative to: S3 {- Q! H# D8 Z9 ~2 _
// the beginning of the loop.
7 t% @* [6 s3 d3 \( O( l7 ~) G& U/ K( B/ F5 f
// This is a simple schedule, with only one action that is
3 J1 d5 }9 I/ l4 H // just repeated every time. See jmousetrap for more
c, t1 i7 U6 A) \" h, J // complicated schedules.4 n0 f; \. e3 k
/ E7 c v: i. p4 v3 M9 A' I
modelSchedule = new ScheduleImpl (getZone (), 1);8 y6 `$ J$ E& f3 u+ ^
modelSchedule.at$createAction (0, modelActions);- p* v" x9 b- l! |; a4 }
& x6 u8 M4 {- }, {, N7 D! x+ `
return this;! P$ u: `. g1 S7 z
} |