HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% g) m+ w# ]: Q" W; ~
9 \' J! q' b; \& i) W
public Object buildActions () {0 c* }, x. D3 S2 h6 Z* F, O" j% E
super.buildActions();7 L0 z. c/ c) o$ t/ g, s8 ]1 b
0 F% i1 z9 I6 E6 K: m
// Create the list of simulation actions. We put these in8 {7 I3 G- Y3 O4 C' t8 _
// an action group, because we want these actions to be
, g @; x. O) \ // executed in a specific order, but these steps should
4 G7 e/ q2 S& M$ I // take no (simulated) time. The M(foo) means "The message; C; r+ A! G8 k& j$ P: N; O) U
// called <foo>". You can send a message To a particular {) \1 J5 b* D/ ]
// object, or ForEach object in a collection.
9 M( V7 z O- n% {: N j
' B4 o( M |! z3 R# e$ Y // Note we update the heatspace in two phases: first run3 R8 d+ V, C5 x/ M3 ^
// diffusion, then run "updateWorld" to actually enact the
6 o R' N& v) ~" D- [; U5 U: m5 @ // changes the heatbugs have made. The ordering here is% ]$ K5 I* B' Y
// significant!
, H/ L( p X" j" w
: z: J6 A. h; \$ F: ~) U // Note also, that with the additional+ T, N6 M# k( |& I& I/ H
// `randomizeHeatbugUpdateOrder' Boolean flag we can- Y: h: e1 ]8 W! A _0 F
// randomize the order in which the bugs actually run" T9 K9 e# m3 D: M4 Y' O7 J5 ^
// their step rule. This has the effect of removing any
" H- S$ d+ ^9 E1 ?2 i // systematic bias in the iteration throught the heatbug
! L! C6 H; N& _- ?6 S$ E/ n // list from timestep to timestep1 w5 h/ Q8 R: j/ K9 c% U& ]
% v0 l& q: E) _2 [+ `3 c // By default, all `createActionForEach' modelActions have! G- }1 Q" T1 Q _
// a default order of `Sequential', which means that the
0 v) k* P" L& x. q& g6 S, Q& l // order of iteration through the `heatbugList' will be
& t. O, N" H) c9 I( x // identical (assuming the list order is not changed
0 U" z! E# t7 H+ d) N // indirectly by some other process).# J6 a: o) [; h% I" a ~, V
" a% E5 R# P" z
modelActions = new ActionGroupImpl (getZone ());$ B) k% n5 u$ h0 }
: a6 o( [1 e: Y3 K7 D1 x try {, A9 I5 o$ f- @, C
modelActions.createActionTo$message5 j1 x* B4 w5 y. [
(heat, new Selector (heat.getClass (), "stepRule", false));/ ^ K4 ?$ w1 ]& M% N' [$ o; H
} catch (Exception e) {! F7 o/ V b, T/ A# |
System.err.println ("Exception stepRule: " + e.getMessage ());
5 ?# v1 Y4 D9 Q. l }. U; N7 J* b+ s4 x
w: u ~, J6 g2 N; ]$ E( W5 v
try {6 o" W+ v% F% V+ ?$ }
Heatbug proto = (Heatbug) heatbugList.get (0);, D: q0 a/ ~0 A3 N4 W% H1 M
Selector sel = $ d/ u: F, [' @( t {
new Selector (proto.getClass (), "heatbugStep", false);; T! v9 q3 `/ g7 y P. t) q
actionForEach =
6 @3 J) m# M/ C$ ^. Y modelActions.createFActionForEachHomogeneous$call8 C# I. W0 q! X! r% r" E
(heatbugList,
% N J6 Z/ F8 F- _' N! A new FCallImpl (this, proto, sel,7 P$ A R I, C: o
new FArgumentsImpl (this, sel)));: V6 Y3 I/ c0 G
} catch (Exception e) {
# c6 `2 Y+ T8 f1 N3 H" z) c/ v$ g e.printStackTrace (System.err);
+ N: ~+ Z7 K1 o8 L/ \ }
3 f( O6 P3 l! i; T& I4 i& [ ( f9 ]8 g. B0 I/ f+ ?. U
syncUpdateOrder ();
3 @1 e9 R1 S [+ k a. a
, a9 H6 H: T7 C try {
# F) `' P! \' q5 s8 l" U I modelActions.createActionTo$message
6 A7 f2 O$ O \ (heat, new Selector (heat.getClass (), "updateLattice", false));" H) a& c( H% Q2 m' U G) \" z2 B+ U
} catch (Exception e) {
! B% V, R6 u! O6 O' U; K System.err.println("Exception updateLattice: " + e.getMessage ());
# l" A" B& l% { }
# x' a# e/ k0 E( @/ r4 f% w
* A: x a. E6 B; x- l! a // Then we create a schedule that executes the' a5 q' V' h* M4 U
// modelActions. modelActions is an ActionGroup, by itself it
3 @! E! i: _% E; V8 ] // has no notion of time. In order to have it executed in
$ E2 _! S; Q4 G# P# a // time, we create a Schedule that says to use the
5 F1 X4 n1 }7 p" D // modelActions ActionGroup at particular times. This
5 e7 r9 b8 s0 y/ ]2 \" H) Y/ L+ v // schedule has a repeat interval of 1, it will loop every
$ G0 ]" q* D# l // time step. The action is executed at time 0 relative to/ e% D# ~! M; _6 Q8 J7 n) j+ m7 h- e
// the beginning of the loop.
; i* x$ _+ X4 L6 a" F
. p& c4 n* @% S // This is a simple schedule, with only one action that is
5 J( a$ v9 g% M // just repeated every time. See jmousetrap for more
& M" r. f+ N! ^: y5 B# w$ y; y$ o // complicated schedules.
7 Z! J* S0 Y# b* B" L
; Z/ K% G1 \% _, X/ m modelSchedule = new ScheduleImpl (getZone (), 1);
! {) z5 n b& Z/ h modelSchedule.at$createAction (0, modelActions);/ n2 g! G& e7 L$ Z! r2 Q& d0 t' S. E
# P& M3 C) \2 d! e G) ^ V return this;/ U" t3 K+ \! w
} |