HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: ~+ U1 a. U! W' x1 {. }7 z6 x5 `" [* ]
public Object buildActions () {, v/ I7 N: `* R* H
super.buildActions();0 a! X2 u+ x# {. Q
; V- R# u$ u4 o4 A3 u& k- B // Create the list of simulation actions. We put these in f b( A& ~, [
// an action group, because we want these actions to be
0 u; w5 x4 A7 t% G k# S. i) e2 }: Y // executed in a specific order, but these steps should
# F0 L/ A. w0 @, d // take no (simulated) time. The M(foo) means "The message L% V* }, v6 ?- S
// called <foo>". You can send a message To a particular) }0 `" K/ P* O
// object, or ForEach object in a collection.
, o5 L1 N& w8 H" i 4 S4 K# q* u9 C4 j
// Note we update the heatspace in two phases: first run
8 x) x, u/ W2 O // diffusion, then run "updateWorld" to actually enact the: q3 \" h. a' x$ L$ i+ \
// changes the heatbugs have made. The ordering here is
$ B7 \4 S F/ z$ B1 k$ n // significant!" {4 A6 W# o8 @1 Y3 B
' K: V, K- `" D: ?' q1 } // Note also, that with the additional
B6 d& h T4 |# z A // `randomizeHeatbugUpdateOrder' Boolean flag we can
* r- t, f2 U% S4 U+ X // randomize the order in which the bugs actually run; _3 t( B$ w1 U0 \5 }# S
// their step rule. This has the effect of removing any3 f A" @. f+ d k+ B0 Z( {3 C3 G
// systematic bias in the iteration throught the heatbug
, ~: B9 d F+ t. k o9 y+ n // list from timestep to timestep6 f. u$ U9 y% p5 o
9 {' y9 U5 s/ u; X3 B // By default, all `createActionForEach' modelActions have3 |# O5 \$ z6 R4 ?0 o: u$ F
// a default order of `Sequential', which means that the
' G# t- n7 H, o // order of iteration through the `heatbugList' will be
$ m {* X5 u+ H4 q // identical (assuming the list order is not changed
" x$ @- k! z- E6 Y/ O! h // indirectly by some other process).! q$ v7 X ]% l
9 l4 C9 ~. p7 q" S* Y modelActions = new ActionGroupImpl (getZone ());
# q0 g4 E# r* V' x/ x8 Y! X( L. k/ r+ W8 Y4 z4 ?" P4 x
try {$ w6 |+ b' x7 X c, }( [8 Q
modelActions.createActionTo$message5 o) z/ E9 p' N) C0 o. E; s% s! R$ ?
(heat, new Selector (heat.getClass (), "stepRule", false));
% c0 X8 d" F1 g6 J: X' L5 Q } catch (Exception e) {* Q; o, ?7 T: \
System.err.println ("Exception stepRule: " + e.getMessage ());+ V! g, V% m2 @
}+ W. A/ t# c5 ^0 [8 D( ?' ?
}% b- t1 x; P5 x% ] try {; h& N: Z% t5 _; G
Heatbug proto = (Heatbug) heatbugList.get (0);
. X1 B7 I/ E. A3 J8 i) \1 `2 f Selector sel =
+ U8 u! N' U: @- L# ^' r, I new Selector (proto.getClass (), "heatbugStep", false);
o! c/ {( r3 L0 z! \ actionForEach =2 a/ M* `* e' g2 Y
modelActions.createFActionForEachHomogeneous$call! c1 s. v5 }! c+ {" ~
(heatbugList,7 f0 K( b' n& @6 C
new FCallImpl (this, proto, sel,
* [1 h! U6 r2 w t+ G! O new FArgumentsImpl (this, sel)));2 _) z" w2 V0 b, E$ h: N
} catch (Exception e) {+ F% v+ m7 }6 c& Z" v# L
e.printStackTrace (System.err);
9 e3 v: ~: _1 [ }. r2 d9 ^+ T6 ?9 b# w
o' w/ j. k( b5 S syncUpdateOrder ();
. \: t& L: B5 T t
5 R# {* C( g8 r6 R2 I, u2 x try {
' {; S: }: P4 k+ g& k* h" ^ modelActions.createActionTo$message ( L& B' f& u; o! a. s: a
(heat, new Selector (heat.getClass (), "updateLattice", false));1 [+ u0 Z( O% n9 U0 Q& ?( _4 e
} catch (Exception e) {/ b% {5 p% O( i6 C* q6 l* V
System.err.println("Exception updateLattice: " + e.getMessage ());
, y- L! Z! F3 F9 e9 P- _( w }
" o+ T+ z' ?2 g$ H
, | ?; Q: a5 u$ v& i* W // Then we create a schedule that executes the' O6 M3 f4 j" u" ~9 J# Q( X7 f
// modelActions. modelActions is an ActionGroup, by itself it
h+ J1 _, \5 T8 R+ {7 Y Y: C* @ // has no notion of time. In order to have it executed in
7 a. c7 n* n5 t // time, we create a Schedule that says to use the
c: F( U5 s# H% a2 D7 x // modelActions ActionGroup at particular times. This+ C$ X; Z; N/ B6 k
// schedule has a repeat interval of 1, it will loop every
2 @3 B" K$ w- b" S3 K9 ^ // time step. The action is executed at time 0 relative to/ I, f- m$ d& d l7 E( ^8 U
// the beginning of the loop.$ K2 `0 r# X' Q. \
- U. j7 X' q- N) N# Z4 Y; w0 b // This is a simple schedule, with only one action that is
, m P% G6 J% P$ B( [# H9 R // just repeated every time. See jmousetrap for more
6 S7 S: r% M; G O( u // complicated schedules.
9 m9 b5 N( k5 ^, \) G 2 ~, e% o9 B4 A+ ]
modelSchedule = new ScheduleImpl (getZone (), 1);) j1 U+ X* E! T. x
modelSchedule.at$createAction (0, modelActions);8 e8 b; i9 u0 q T6 E9 B) L
4 B1 r: ^7 w6 e+ J J1 i ~; Q) X. x
return this;( U. J( P g R. _! _: t
} |