HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 C7 }" [8 h4 u
0 T5 a% i3 @, T' O3 j public Object buildActions () {4 E j. J1 V( l4 X3 v5 Y9 R3 K8 a. V
super.buildActions();
, L7 T# U8 p% M& K
9 r5 R- g# b; @4 x/ h // Create the list of simulation actions. We put these in! I+ j5 B2 Y9 q& ]- m
// an action group, because we want these actions to be7 {3 W0 S, K: [+ a& a
// executed in a specific order, but these steps should$ ?" I6 x6 }: ]! j% ~$ o; K4 Q8 A+ J- A
// take no (simulated) time. The M(foo) means "The message u# L) P) e( |. R# A! `
// called <foo>". You can send a message To a particular
0 F' o1 X6 M8 \- H. Z // object, or ForEach object in a collection.
' q# s: [- T% E+ C% m) ]
, o1 V# U ]2 c) B // Note we update the heatspace in two phases: first run8 m. }* t3 i( t5 y9 c! A5 ?. w7 t
// diffusion, then run "updateWorld" to actually enact the
{$ y7 y5 L& | // changes the heatbugs have made. The ordering here is
, `3 S. p* f0 j- ~# V. R: a // significant!+ b# ]5 N$ P6 @1 X
1 x @, f2 t3 |6 ?- E% l9 Y // Note also, that with the additional
. W; z$ E. J1 E- Y) b0 E7 I // `randomizeHeatbugUpdateOrder' Boolean flag we can% a5 t& a/ g: R2 d5 G% x8 c
// randomize the order in which the bugs actually run4 l! }' E( J3 R8 |
// their step rule. This has the effect of removing any: `3 H! T0 A3 U5 B4 m( J5 w6 u
// systematic bias in the iteration throught the heatbug
7 G8 R3 ^9 B4 P; Q( j // list from timestep to timestep
3 U0 j; M7 M4 S' t
+ \) M# L, i) d+ D" i- h // By default, all `createActionForEach' modelActions have
3 x& ~& w2 W7 A* X; @# m. I, { // a default order of `Sequential', which means that the3 U& ~9 `: y* B2 X% \8 w
// order of iteration through the `heatbugList' will be+ c4 h- T. x; D% o
// identical (assuming the list order is not changed
6 x3 B& S' D# ?+ K. r: j+ V( a // indirectly by some other process).9 ~# i9 h5 ~9 X: Z' a
( X( ?, a" ` c1 ? modelActions = new ActionGroupImpl (getZone ());: ~# c9 R8 J: G m8 M& ]1 k5 a
* g8 u. y, V- i
try {% F7 X5 D' S T8 n" m3 D; n$ _
modelActions.createActionTo$message% A8 a( j5 n" z2 L
(heat, new Selector (heat.getClass (), "stepRule", false));( U- [2 G7 V, U% {' i2 b
} catch (Exception e) {' X" S& m9 K- u5 v1 O$ c
System.err.println ("Exception stepRule: " + e.getMessage ());2 A& _+ ]$ m$ L& X8 `/ k. r
}) c* S" Y/ c& T* ^2 K/ B
+ s1 z/ ^' [8 D+ [# J
try {
+ o% d$ Q' S* K1 y$ C Heatbug proto = (Heatbug) heatbugList.get (0);& d+ I" t/ r$ c' r+ ]$ |; F1 Q/ Y( k
Selector sel =
$ @4 ^# o2 [- Z2 J0 q3 I L2 J: m* F new Selector (proto.getClass (), "heatbugStep", false);
" c# S+ Q! W- r* F8 v T; S actionForEach =4 t& Y, |" @0 K
modelActions.createFActionForEachHomogeneous$call
$ J7 Z. P& x0 j6 f% p (heatbugList,$ v* p) [7 ?$ i7 E" d" n" V
new FCallImpl (this, proto, sel,7 ^/ Z7 w) J; E0 ~/ k7 x
new FArgumentsImpl (this, sel)));% x' f7 F y0 H
} catch (Exception e) {
* |; K* Q* C% ~' _4 r e.printStackTrace (System.err);; h `/ o7 K! O( y: n: R9 s3 @9 F
}
) e+ @- g4 w: Y) t: P
$ Y7 \+ _- W! f5 {8 v1 I syncUpdateOrder ();
8 M8 U* ?: f5 h# R* {0 \( w5 S+ Q7 Z1 F5 v9 S1 N( c, Q: N
try {) ]* U( _2 ]8 L
modelActions.createActionTo$message ; m: G! ~, I6 m* S% n" t I7 E
(heat, new Selector (heat.getClass (), "updateLattice", false));
& t- F2 Y3 c! @6 O( A } catch (Exception e) {/ B3 h( G$ H* F# ^' A' g
System.err.println("Exception updateLattice: " + e.getMessage ());
- H/ d: |, g7 A }
8 P, j, x6 p2 D5 u5 V- v * I- Y4 j+ w- V, u- p
// Then we create a schedule that executes the2 [- ], a6 P( P4 F+ ~. V
// modelActions. modelActions is an ActionGroup, by itself it5 v% y* z$ G m! ~1 c3 K) N# j2 D
// has no notion of time. In order to have it executed in
4 b4 i5 M6 O/ P$ m: E6 o // time, we create a Schedule that says to use the
8 A* `# u* L6 m+ p+ k! m9 i$ i9 n& w // modelActions ActionGroup at particular times. This8 e/ j% A3 h" P: H* z# Y
// schedule has a repeat interval of 1, it will loop every
" p% \! W% k- i9 w1 Z8 Z- O" ]7 } // time step. The action is executed at time 0 relative to- s6 ?9 ^. h+ }' |1 i0 ~
// the beginning of the loop." {, {0 x; a! ], [/ Y. U( R
P/ `* c! j. u0 S+ L7 b // This is a simple schedule, with only one action that is
* W4 G; j/ R+ p0 g6 a* P- o // just repeated every time. See jmousetrap for more' v9 Y3 |" P9 X; Y" @* `8 Q
// complicated schedules.5 \* f6 i3 A! }" C- ?
# g# d& J* I; w% h! h3 x1 P& N$ T modelSchedule = new ScheduleImpl (getZone (), 1);$ W2 Z3 U+ T/ T7 O
modelSchedule.at$createAction (0, modelActions);2 K5 Z$ x; r* H0 [) m
2 l/ a, R8 R. z
return this;
& @0 f) N2 I% w, \ } |