HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- R& `8 U( |3 T% [) K0 u r: a+ i d2 ?
public Object buildActions () {
# i( w `& P0 m6 L8 d, _ super.buildActions();
$ v. h$ I) F3 C1 V
! J. ]+ t! {2 B6 u# k- Q // Create the list of simulation actions. We put these in
9 J5 n& d) Z5 l // an action group, because we want these actions to be. [+ P% \& M' c; g x2 z
// executed in a specific order, but these steps should
. Y; i- G5 U! T. \% N // take no (simulated) time. The M(foo) means "The message
# i) O8 L; e" l( q6 F$ _7 | // called <foo>". You can send a message To a particular
6 \+ J0 _! u# V$ s/ O // object, or ForEach object in a collection.* k* C' E) m5 V& N1 Q2 C$ u7 e
1 e7 n, ~' D. t- ]* l // Note we update the heatspace in two phases: first run
9 i" L( g1 |9 j( k' n' H6 V; u- R // diffusion, then run "updateWorld" to actually enact the" @7 M: ~- o/ z
// changes the heatbugs have made. The ordering here is/ K1 ]0 g1 w: z/ }9 [5 v ~
// significant!" F6 @9 t2 H$ k7 U# y" _# E7 d
* Z5 k6 `3 g; G5 A
// Note also, that with the additional; g. T( A8 g4 I5 I2 z
// `randomizeHeatbugUpdateOrder' Boolean flag we can& k6 \* k# @/ C4 R$ A6 l
// randomize the order in which the bugs actually run
. Y$ s( F: P# m" t4 J9 j# c! t // their step rule. This has the effect of removing any
: f* K3 |2 ?' Y6 m7 w" c' v/ D // systematic bias in the iteration throught the heatbug
- |6 h, t1 i6 V$ e // list from timestep to timestep
- G* D- F, X1 @! Q) ?( l
* Y2 M( F- Q7 } Q* B3 B0 F // By default, all `createActionForEach' modelActions have8 [+ a% F5 Z N
// a default order of `Sequential', which means that the" x& r) ` v9 k( l: M' I
// order of iteration through the `heatbugList' will be
8 A4 q% v7 T5 \; V6 E* v4 l4 E+ w // identical (assuming the list order is not changed
1 A! @5 ^3 ]; ]* A5 n // indirectly by some other process).' Y$ q0 c' h4 z% L# `3 C& m( ?, Z/ B
' i* }# p! L8 s1 N' V. i. u
modelActions = new ActionGroupImpl (getZone ());
d A8 N4 K* a& C* [
+ R4 `7 s' _# P1 H. G) c try {
. R5 M- s8 v4 w) r% I modelActions.createActionTo$message9 J7 R% B, n6 T
(heat, new Selector (heat.getClass (), "stepRule", false));
7 G; D! m4 m0 } } catch (Exception e) {
1 S' o) J: Z1 T9 |! H3 g* @% Z3 Y& }$ Z System.err.println ("Exception stepRule: " + e.getMessage ());6 s! j: g' A% c" x7 a5 ^
}6 }% t; k* Q" W. C' s
+ T9 \$ P1 |& B. C1 V2 d
try {
* e8 X1 N/ ~6 b" O Heatbug proto = (Heatbug) heatbugList.get (0);
* X' @0 P- E( G. c Selector sel =
0 g7 ^- a( j+ l: |, y4 m& X new Selector (proto.getClass (), "heatbugStep", false);
1 K( v u$ `$ d2 |; d! ^: \6 w) Y actionForEach =
" M+ @! b0 `0 F: L: d T; Y modelActions.createFActionForEachHomogeneous$call* @9 N' I& \2 V/ z( K# G
(heatbugList,. {5 W; A) w5 ?5 a* ~' l8 P
new FCallImpl (this, proto, sel,
9 y' W- Y) v, Z$ ^* N- c, Z8 Q, J+ `9 i new FArgumentsImpl (this, sel)));8 q% D- T3 _8 X2 ?# H
} catch (Exception e) {
8 R6 B1 }4 K% `, C6 x5 Z e.printStackTrace (System.err);
; l( M g8 K1 k7 c& o }
; Z% [8 \& c) {' m
. B; t& Y4 X5 @5 M- {* h syncUpdateOrder ();
0 o" K$ r, U) O. i, A7 J
6 a3 U1 I$ F7 E# I% ` try {- ]7 f" K7 m, T- e% a
modelActions.createActionTo$message . B0 f7 c( Q) d/ @7 e/ F
(heat, new Selector (heat.getClass (), "updateLattice", false));8 c! q. X; _! T8 N' e
} catch (Exception e) {
9 H/ c& }( y- X9 F2 c System.err.println("Exception updateLattice: " + e.getMessage ());
6 E1 E- W5 H" o* w( s9 O }
O% a9 F1 l& g8 C5 S
/ x" @2 H/ F$ K6 y4 } // Then we create a schedule that executes the9 ~& f- V$ a+ n5 E. ^* {
// modelActions. modelActions is an ActionGroup, by itself it/ A. ?& C+ t) ?+ K. k
// has no notion of time. In order to have it executed in+ U+ O k' U4 j5 ?, k9 b; ~
// time, we create a Schedule that says to use the
% l6 J8 n6 r9 A* u+ r/ z; o // modelActions ActionGroup at particular times. This
2 c( b# X5 y/ z3 {# H0 y9 o- Z // schedule has a repeat interval of 1, it will loop every' W/ t- N# W9 k0 h9 `4 d
// time step. The action is executed at time 0 relative to# [# i$ c5 x$ q# u9 e! U K/ I8 c
// the beginning of the loop.' h# H( c' A; F% `+ e: }! u
& [6 ^+ t J1 S8 l- [' W) U
// This is a simple schedule, with only one action that is
* D% \ L. `# l5 O, _/ c# W // just repeated every time. See jmousetrap for more
1 f" m6 X3 l8 o. a // complicated schedules." s* W0 S3 Y$ e
- i3 k4 o4 w5 q- P8 Y7 Y0 [: o modelSchedule = new ScheduleImpl (getZone (), 1);
) s* y/ K" f7 Q" `- | modelSchedule.at$createAction (0, modelActions);
. m- |8 |7 |' c$ }# c1 G- |0 `5 Z+ I5 E ^0 g$ ~ p3 c) D$ g* m5 k
return this;
1 L/ b" v2 g8 j2 f4 E5 z# m A, O } |