HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- z; F" b: ]% `7 z# P! c
9 n4 A2 d& { q2 P- Q, o public Object buildActions () {7 H# h) s8 h* l6 \, B \) a
super.buildActions(); p* f* [3 ~5 N# S. }/ E7 i: ]
u2 S- G' N, M( W. k) k // Create the list of simulation actions. We put these in
' m7 q; a/ a) c // an action group, because we want these actions to be& A# h5 P' R& ?! v3 h. i
// executed in a specific order, but these steps should
( l# Z. D8 d* L( \3 n# j9 C: ~" n // take no (simulated) time. The M(foo) means "The message
& T k3 {3 X. \2 K: ~' m: D8 A // called <foo>". You can send a message To a particular) b O- m5 I7 p c9 n- |
// object, or ForEach object in a collection.
+ p* A, @. \. h: h& [8 N
; X$ }) P# E2 l2 }0 m6 Z, ] // Note we update the heatspace in two phases: first run P, }( S0 _) D. X/ p
// diffusion, then run "updateWorld" to actually enact the
6 w1 a+ d! ]- a4 k // changes the heatbugs have made. The ordering here is# p5 ?+ k, Q, x
// significant!
% C3 X4 B q" W4 H0 h
# d3 Q) Y& s3 z- g( j7 P // Note also, that with the additional) t( E% E6 x; l; F3 o* ]/ S! u- c
// `randomizeHeatbugUpdateOrder' Boolean flag we can
2 P; g( V( }' C5 I // randomize the order in which the bugs actually run
7 V, o6 }% @7 n5 J4 v2 P8 @3 E( R // their step rule. This has the effect of removing any
4 Z" q0 S% x* g1 Q2 R$ G // systematic bias in the iteration throught the heatbug: i" D5 u* o7 V$ `- q3 y
// list from timestep to timestep: E( I; a; [1 M( W" }8 ]" ~
+ X. G* W+ K, e9 o( M9 K! d
// By default, all `createActionForEach' modelActions have
! ^, [9 ]2 ?( z. S( d // a default order of `Sequential', which means that the# N5 q' V- w& p/ v& t/ b2 P
// order of iteration through the `heatbugList' will be
, v4 A! Z9 X2 c. w0 X6 K) b+ ? // identical (assuming the list order is not changed
5 \. N. V+ D/ ^ // indirectly by some other process).) D: j+ q; j4 C1 V
' A& f/ {4 Z! Y0 \) N: Y3 d0 E* p
modelActions = new ActionGroupImpl (getZone ());; o0 W3 T7 E9 H. Y
. x Z+ \% D; Y4 i/ T* b. t
try {
0 U2 H7 L5 A% B6 ?5 q0 ~ modelActions.createActionTo$message
- q8 M! I' H$ R u (heat, new Selector (heat.getClass (), "stepRule", false));
5 v* b1 [# S4 L. I } catch (Exception e) {9 O! E$ X; [8 ~
System.err.println ("Exception stepRule: " + e.getMessage ());
; ]" `* T/ H% { }; d* j0 u/ x& P" l% A _
- y# J' q( w z try {
& G0 M& H- f# B Heatbug proto = (Heatbug) heatbugList.get (0);% T! m2 o% l5 A, E1 v
Selector sel = , `, W, E) B j2 J. o1 B
new Selector (proto.getClass (), "heatbugStep", false);- c% {/ B/ W. J$ n/ g
actionForEach =7 [5 Z8 g5 J! B0 W: q
modelActions.createFActionForEachHomogeneous$call
& u* p: p* F8 T% b (heatbugList,' h7 o0 Z+ |9 P- H; N
new FCallImpl (this, proto, sel,
6 X6 J, V$ q7 i0 G new FArgumentsImpl (this, sel)));7 Z: s d" y6 Z% @, O* E
} catch (Exception e) {
. H: }: X- J6 Q8 o b$ c/ T; e e.printStackTrace (System.err);7 Q! |4 m$ T# r- D9 E
}" e( u. W+ g+ B' |8 _( D- S6 h! G# ]
9 B% t( C/ o& n syncUpdateOrder ();' A& C, p. T3 l3 X7 f) ^8 s) U
% N1 @& W6 x% m0 D% i/ } try {3 p, ]9 o9 d7 S# D" B0 }" J0 m* a
modelActions.createActionTo$message & f! G2 F' v# b2 K
(heat, new Selector (heat.getClass (), "updateLattice", false));7 T& E( B7 Y% a* X' _1 N
} catch (Exception e) {$ G2 x# h/ U' F. N& C g/ O
System.err.println("Exception updateLattice: " + e.getMessage ());
: h9 b9 M) ?6 l# y. Q0 p; [2 [2 J }+ M) U/ G* S3 p$ b* j* O; e4 E
7 ]1 `! S" y$ Y. c, m
// Then we create a schedule that executes the
r6 A3 V e; X4 v+ Z: Q' I // modelActions. modelActions is an ActionGroup, by itself it
7 P' m* |: N5 x" w2 C // has no notion of time. In order to have it executed in" }% a/ ?0 g5 A$ T, F) j/ K
// time, we create a Schedule that says to use the( D/ Z z9 l/ g3 Y& }
// modelActions ActionGroup at particular times. This2 u* d2 H: _) h+ s7 J2 x. l
// schedule has a repeat interval of 1, it will loop every
. h/ g/ [" @9 W! |* q" n // time step. The action is executed at time 0 relative to
& P/ l# R) m! l# n7 I. p8 w // the beginning of the loop.. |* i$ a2 W% H; ~% c& @' ?
. R- S0 k5 T. h
// This is a simple schedule, with only one action that is/ ^; J5 ^) W" B/ Y
// just repeated every time. See jmousetrap for more
0 w; w, Y3 U5 h8 I/ D // complicated schedules.1 L Z( F7 O9 V1 X
6 N% h' c% P7 n* G- H/ [+ C
modelSchedule = new ScheduleImpl (getZone (), 1);
; C) A; O9 s2 [% M8 u) z3 o' d modelSchedule.at$createAction (0, modelActions);
. U* H/ n G5 T & r# n' m- N. C; I- q6 K
return this;# _" Y1 t' R. d
} |