HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
5 C# V5 Z. n( K$ Y5 i0 e3 v
5 n! g1 r: V1 k" ~# [ public Object buildActions () {
3 ^/ g! O! @9 G# Z& e1 o super.buildActions();
! ]: ~5 K$ u) i
7 V4 m( q- W8 K0 a: N/ g // Create the list of simulation actions. We put these in
8 D) I) F- D5 A: P7 t // an action group, because we want these actions to be" P# ~1 a$ {1 M! c; m
// executed in a specific order, but these steps should1 w, q: S5 L! a; O& I0 e
// take no (simulated) time. The M(foo) means "The message
8 k2 ~8 I! k9 N+ v // called <foo>". You can send a message To a particular) M8 a/ L) T2 @+ }% w
// object, or ForEach object in a collection.
7 O, M+ d2 N0 V) }! o8 a
) |& m" S+ i) G% l // Note we update the heatspace in two phases: first run4 u4 M+ ^" ^' N% _" t6 o7 ]" v+ U b
// diffusion, then run "updateWorld" to actually enact the
$ V" J; E% i: _! b* g$ x) W9 ? // changes the heatbugs have made. The ordering here is# E0 }1 q7 T ]( r$ b
// significant!
( |9 v3 T) @7 |6 }; ?2 t
7 s+ V c/ H5 @! d& c i ] // Note also, that with the additional( l6 X2 Q2 a7 f
// `randomizeHeatbugUpdateOrder' Boolean flag we can/ H" J; q4 P( @ H) V
// randomize the order in which the bugs actually run
% L! }' u: P" X# k // their step rule. This has the effect of removing any
/ W+ a% x1 n* @/ R* g( @ // systematic bias in the iteration throught the heatbug
5 A) J# [8 `5 ?* m# _ // list from timestep to timestep
4 y) T, X. t S! {) N & G! _5 x* Z4 J n3 Z) v
// By default, all `createActionForEach' modelActions have
) {- d+ C2 b3 Q/ E7 g // a default order of `Sequential', which means that the' B4 y* u3 K/ I& N6 {2 V" e
// order of iteration through the `heatbugList' will be
* R9 G: w- h; d4 A/ w( B // identical (assuming the list order is not changed
; N O- P% w* f% J) r' X* F // indirectly by some other process).! m" q [% a. H* a. i5 H0 q L
/ w7 a G6 C* W: h$ Y+ z) d( s; |
modelActions = new ActionGroupImpl (getZone ());
/ [) j. U0 J$ w( y( x6 |
2 X/ ?+ @( d0 {- ^5 u try {
- O6 B; V7 M) |( z2 H( I" z modelActions.createActionTo$message
0 e \* K/ Y2 C. E (heat, new Selector (heat.getClass (), "stepRule", false));( ]" q5 M6 G5 {7 Z
} catch (Exception e) {" F0 l( c6 n& I) @" g2 ~ n: o
System.err.println ("Exception stepRule: " + e.getMessage ());% U8 N$ r% A. y9 P& K" k4 x5 p( h
}
4 j- t; R# {7 O) Y# P z1 W0 ]& D8 w/ j% Q/ a; x, p
try {
\ B$ [- N' j5 r& n; B Heatbug proto = (Heatbug) heatbugList.get (0);& r' r) y7 k5 G3 L$ z N+ ~- b
Selector sel =
9 c( y9 s1 L1 O+ ]: t4 i2 F new Selector (proto.getClass (), "heatbugStep", false);) ~7 t" [7 H. B0 u
actionForEach =* G! N2 w( l2 O$ Q5 y
modelActions.createFActionForEachHomogeneous$call
8 \2 N3 l( t k (heatbugList, t% d! C" k: \8 Y/ e
new FCallImpl (this, proto, sel,
, G) o$ r# q) f$ P Y; n new FArgumentsImpl (this, sel)));
4 V1 g. F6 ]# ?# k1 W* J } catch (Exception e) {
& R! m& z/ g$ ~# Y/ u1 a" Q e.printStackTrace (System.err);
6 [" p) j( @) F/ Q( v. W: z7 y }+ F1 Z. t' _4 u P+ N
/ x% w) r- w. Z2 A2 F L# V
syncUpdateOrder ();. D! w/ {0 S1 [- b1 m9 j
' y/ t& \* O; Y- S5 ?# o7 W2 e2 q: V
try {2 r! z1 j W( _; D6 z& |! x
modelActions.createActionTo$message
- B% {1 m! @. ?; @: [- [# A7 Y! c (heat, new Selector (heat.getClass (), "updateLattice", false));
, R8 j0 |+ v9 M' f } catch (Exception e) {
' G) R1 E. |/ a0 v System.err.println("Exception updateLattice: " + e.getMessage ());# Q4 `! o! E0 m1 H" H) s# E
}
( Z$ ~8 F2 x7 [4 m5 e
. e% k/ ^( P% `- |+ M* C // Then we create a schedule that executes the7 X& A$ M6 L" V' @' F
// modelActions. modelActions is an ActionGroup, by itself it/ u# t: @; m% v
// has no notion of time. In order to have it executed in+ O) l9 S) g( D$ V8 t) G
// time, we create a Schedule that says to use the* p+ U2 U3 ^$ V; m; R2 S
// modelActions ActionGroup at particular times. This
/ r" k$ J: Y' w; o5 m/ L0 F // schedule has a repeat interval of 1, it will loop every( O) |4 x5 x% a& v
// time step. The action is executed at time 0 relative to Z2 u9 c3 `+ q# E
// the beginning of the loop.2 n1 [- ^4 S' O" s# \
3 O2 V$ f/ m* C. b1 n0 H% s( y
// This is a simple schedule, with only one action that is. H& V8 J. Q z# _/ D4 ]" X
// just repeated every time. See jmousetrap for more5 u6 W9 t% A% _3 h% N
// complicated schedules.
0 e0 z/ a5 h# }0 G, M; [1 ` : U& a- w! K. K6 B5 U2 u& `
modelSchedule = new ScheduleImpl (getZone (), 1); }3 G8 j; V( ?; R9 M
modelSchedule.at$createAction (0, modelActions);& l, ?* O/ U; |) A2 }6 n/ ]$ a* x
' W; @; z* R& |% F3 m
return this;5 o7 B1 b+ S4 K3 v8 g
} |