HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:! K: b$ ~( c# M) T5 _
% J$ v6 s5 ]" s- g- y5 F% K public Object buildActions () {( i+ U" p! W2 `+ {: ]. G
super.buildActions();* i: w* P( P& d7 D/ y, ?# l3 N! x9 z
7 G# ~9 J* ^" ^6 b6 p) n* {
// Create the list of simulation actions. We put these in7 S; |2 T' [( c6 ^1 }
// an action group, because we want these actions to be
) w n8 H* K9 U3 Y2 [ // executed in a specific order, but these steps should
. O0 O* K. v% d6 m- d6 L4 g# A! ] // take no (simulated) time. The M(foo) means "The message
# ]# v8 p: I6 a- ]! a // called <foo>". You can send a message To a particular: R+ S6 q$ ~5 J: m
// object, or ForEach object in a collection.9 Z T, @0 z3 a3 Y+ D( x4 p
% f8 ~7 u% I5 k4 T+ ?- V% _ // Note we update the heatspace in two phases: first run
# m( a, j& A Y: U6 B, b // diffusion, then run "updateWorld" to actually enact the4 m9 R* w3 Y! u
// changes the heatbugs have made. The ordering here is
3 z' f& U2 _0 h' U // significant!/ G3 \& n& g* m, P! e. Q) f# w
. C- j. }! ]! P S // Note also, that with the additional! Z5 S' A6 l6 I( }: n8 U' K+ H
// `randomizeHeatbugUpdateOrder' Boolean flag we can
% c* k: }. X+ G5 f( I5 h1 P // randomize the order in which the bugs actually run1 s) o {, v& g
// their step rule. This has the effect of removing any) h8 c1 H. m- @9 I' O
// systematic bias in the iteration throught the heatbug
" \- k z( f* [0 i& ] // list from timestep to timestep
8 c+ C6 h5 F. [( t1 W
; P& [9 h- \; T8 }/ Q: B" ] // By default, all `createActionForEach' modelActions have
9 A6 i& N( C8 Q+ @ // a default order of `Sequential', which means that the
5 m' A8 b4 b# Y4 i: {: A // order of iteration through the `heatbugList' will be
9 q8 @9 y8 q+ g' E) ~# _$ N! S // identical (assuming the list order is not changed0 \! l$ R4 q) m/ ^3 |
// indirectly by some other process).
, t* C6 m) A: f& @0 u * {. ]3 T5 L1 p+ F* b. N
modelActions = new ActionGroupImpl (getZone ());3 |4 F. M' K# y
2 F' E: V, i4 U5 p* Q7 q try {
F+ I* p2 q5 Z modelActions.createActionTo$message3 K8 W4 I8 x0 j1 b' f
(heat, new Selector (heat.getClass (), "stepRule", false));7 Z1 g; g- T& P6 p# v: w2 N
} catch (Exception e) {6 d0 S' n! f/ W" x. h
System.err.println ("Exception stepRule: " + e.getMessage ());; Y& ?+ o5 V- a( \
}0 @1 V. A3 o+ y* k) J/ o' A, ?1 r6 F
+ J) R4 m9 ?; i5 E, Y- c
try {
2 f9 B1 `2 @4 c& e$ Q; Z Heatbug proto = (Heatbug) heatbugList.get (0);
1 g Y" T1 v" P. c) I Selector sel =
+ Q7 C5 U' J. Q2 H new Selector (proto.getClass (), "heatbugStep", false);
2 y Y$ W3 ^' Q. c. d/ N! M actionForEach =
5 }1 U1 l. c7 l" U9 _ modelActions.createFActionForEachHomogeneous$call
* i. ^* o9 W: { Y7 {4 b/ b (heatbugList,! x F* }. F* T
new FCallImpl (this, proto, sel,9 k5 {' L; I/ x2 {0 I
new FArgumentsImpl (this, sel)));' B( }# k- b. {- `; M
} catch (Exception e) {
! E8 l8 C/ _+ X5 I e.printStackTrace (System.err);. ]. F8 V, Y# s0 w2 ]: o
}
6 A: j) t& H. C% E9 E) Z , m8 P B3 t( }0 b. W
syncUpdateOrder (); y) u( g; F0 r$ e% s& D, `& L# t
0 S5 V- \+ O8 R- U
try {
' W1 L7 {, O# G) \1 Z' c modelActions.createActionTo$message | C9 M! }0 i% X' D
(heat, new Selector (heat.getClass (), "updateLattice", false));; p. a% I& o' h" ^# | ^( E4 e7 L
} catch (Exception e) {1 E0 { M1 g5 x
System.err.println("Exception updateLattice: " + e.getMessage ());
. o' a* Y8 j: _( E: Y& ~ }8 l3 o. r. t7 J! o" U0 X7 v g& W
9 a9 _2 X8 \$ V9 O; I- ~3 f // Then we create a schedule that executes the
" p# z/ M, o. o& f // modelActions. modelActions is an ActionGroup, by itself it. [2 s! i' ]6 d& |) y
// has no notion of time. In order to have it executed in
5 {( k, B! V( Z9 h // time, we create a Schedule that says to use the# v' }$ P9 w: T# w
// modelActions ActionGroup at particular times. This p7 W9 J0 ]" K# R: P" Q' Z2 \$ A
// schedule has a repeat interval of 1, it will loop every
( u3 a. i$ {- [! f0 V // time step. The action is executed at time 0 relative to5 }% C' r- }8 ~
// the beginning of the loop.8 {# Q0 I" x0 A6 O0 k! p
/ s2 o7 a) ~& p
// This is a simple schedule, with only one action that is, I6 T& `: b! |
// just repeated every time. See jmousetrap for more( n: O8 _* P6 a( V; M( c0 _9 g3 R
// complicated schedules.$ U( ~2 A1 W) }9 G
4 N5 o6 Z4 i$ r ?! }# j modelSchedule = new ScheduleImpl (getZone (), 1);
% N* B' n4 t- o3 X modelSchedule.at$createAction (0, modelActions);9 B+ X4 `' A7 p, |4 ~8 i! s: f
) W8 w9 ~) f# h: k5 ^4 ]
return this;
. p! I1 h8 w3 L. _( _7 A } |