HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; c7 O4 i/ l7 F. \; i. r# i
+ g# U: S$ A* q# x, b" P public Object buildActions () {( o) `/ q$ @ z% q) C
super.buildActions();* i( a5 o: K1 v; p( H
" K: r2 E) C5 u7 ~; \! {/ O
// Create the list of simulation actions. We put these in- s- K; i( T: o9 K
// an action group, because we want these actions to be. Q" d7 v# l: K3 D
// executed in a specific order, but these steps should/ [ D2 _+ H! }% x7 W! p
// take no (simulated) time. The M(foo) means "The message
0 T) a* ^, t: e" Z // called <foo>". You can send a message To a particular' I: h4 b9 @4 y
// object, or ForEach object in a collection.% v7 e h5 R' X% z' R% L# [+ P3 t
6 O* m( G H; {3 v& x% P
// Note we update the heatspace in two phases: first run7 M9 N2 `; _! T9 G3 }8 y1 K) J
// diffusion, then run "updateWorld" to actually enact the) a1 P7 [; D6 S+ ^7 ]; |4 d+ m9 A
// changes the heatbugs have made. The ordering here is
2 A5 ?2 e+ K# ? // significant!0 C$ J$ V9 ]1 x# k6 J H. F
1 T+ Y; ~3 Y) W7 ?' @+ u. B; ]2 L // Note also, that with the additional
0 k8 `. o. |' M // `randomizeHeatbugUpdateOrder' Boolean flag we can4 R1 ]- x4 q6 ~2 n5 }/ o5 V9 n M
// randomize the order in which the bugs actually run3 a7 r- O4 v# I' j
// their step rule. This has the effect of removing any
/ q( g2 `$ p, }- b' ` // systematic bias in the iteration throught the heatbug# c: ?% c: X$ Z& o/ s8 }7 F9 s
// list from timestep to timestep
+ h4 C5 G, E* p * I2 U& C6 [+ a8 y1 r& b
// By default, all `createActionForEach' modelActions have0 w$ ]2 `" H# y% ?
// a default order of `Sequential', which means that the
& E8 r8 @1 S# G. c: B6 l // order of iteration through the `heatbugList' will be, L4 S3 z' E' B Z" \
// identical (assuming the list order is not changed
, u5 U1 b) Y9 e1 V2 @ // indirectly by some other process).
5 E9 T+ W! Q( j q4 t
$ Y2 v" l5 W0 [+ T* t& Q modelActions = new ActionGroupImpl (getZone ());" h8 x9 H; v( T
6 p$ |& R) r# L X try {
8 W2 g R3 l. o modelActions.createActionTo$message
# f- [- N" i1 S+ ?+ `. E' [* g6 I Z (heat, new Selector (heat.getClass (), "stepRule", false));
$ U8 |/ F+ j* j d1 a, A$ t } catch (Exception e) {
( f& T; f- Y- j0 J System.err.println ("Exception stepRule: " + e.getMessage ());
8 r7 ~1 V( n+ X D1 [) ]* @: p6 G' K* ^ }/ {/ J+ P' J. `* q+ a) j; o' `$ _
. R( J# }9 Q/ y
try {
. b* F/ p! ~& R0 {0 o4 C7 L Heatbug proto = (Heatbug) heatbugList.get (0);
5 B% t( e' Y2 C0 `) J+ E- Y Selector sel = ( {! i' T8 \5 J# v1 e6 ]+ i' n
new Selector (proto.getClass (), "heatbugStep", false);
! l0 P8 V. x6 s( g. X/ v/ _ actionForEach =3 Q5 E+ d4 J" ~5 t' J+ d0 N
modelActions.createFActionForEachHomogeneous$call! W9 V8 j5 f) z, S/ L1 i
(heatbugList,
5 L7 F2 Q7 N8 \- x; ?/ f+ a new FCallImpl (this, proto, sel,7 H1 u7 n8 ?6 S( H- B. ]1 |
new FArgumentsImpl (this, sel)));
3 x$ A: | M" D$ P6 [# { } catch (Exception e) {
% U* [/ m5 g2 \' u* ~; _ e.printStackTrace (System.err);
' Y u. w3 [* w7 A( Y5 q) L& I }
' m% I! C8 \5 A4 B0 Q0 t- _
2 c) L- m5 c* `6 O1 c4 L' L syncUpdateOrder ();
. q. \% d* x# ^. r# l5 U6 j( h, c) T
( q! P2 C% O* v9 }, W1 I F% L try {$ O2 v) W" q0 I3 f% Y0 q+ u
modelActions.createActionTo$message
( m1 \- b2 N/ Q$ Q2 Y- _, m8 E (heat, new Selector (heat.getClass (), "updateLattice", false));6 P9 e9 d8 ?% G8 f+ d
} catch (Exception e) {
2 n* c6 g H: P5 u7 x System.err.println("Exception updateLattice: " + e.getMessage ());
9 e H/ a( [! T/ R% z' z9 \- P# Q }) b2 Z* C! d& L. Q" u; I; |9 A/ v, q5 ^" K
6 e2 d$ S; k" |: |) s
// Then we create a schedule that executes the* p6 F) d/ m Q% L3 w. F
// modelActions. modelActions is an ActionGroup, by itself it: w5 E1 P: z; d5 }; S
// has no notion of time. In order to have it executed in/ d; X' Q& J0 y! z% d
// time, we create a Schedule that says to use the
+ @1 ^/ e2 q/ k$ M$ x# ] // modelActions ActionGroup at particular times. This, {/ a& r, M2 L8 o' L
// schedule has a repeat interval of 1, it will loop every: U! m& y2 ~ c7 h8 F! M; W- e! R/ x2 X
// time step. The action is executed at time 0 relative to8 O; ~. E% {" r! w6 H8 L. L
// the beginning of the loop.
4 v% n" C9 U0 _5 c2 G4 }- `8 j h b
// This is a simple schedule, with only one action that is
+ S6 W8 p* v- X* F // just repeated every time. See jmousetrap for more
& u. o4 _3 J r* A8 n. | // complicated schedules.. \3 g8 @- Z! N# e
, m& b& E/ @2 f modelSchedule = new ScheduleImpl (getZone (), 1);
& d! z( e7 Z3 J modelSchedule.at$createAction (0, modelActions);, c" h$ R& Q! l9 U9 \6 t
* @( D$ T2 F' s: m) T
return this;
- B/ p/ [1 N0 q3 ?9 V% p! r } |