HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- G! ?. U; t3 C" X5 `/ W' H* r
, W9 G% W. s# t. x3 J/ u public Object buildActions () { i3 _1 ^1 K+ K
super.buildActions();
0 f% q; p- p2 m; g' P" z) o 3 k0 b3 Q0 C* z# q: M3 P3 ^
// Create the list of simulation actions. We put these in! Q) x6 |0 c7 |/ x5 B
// an action group, because we want these actions to be9 l8 ~3 {# W! J }' A1 t
// executed in a specific order, but these steps should
" J2 l. y6 E1 y // take no (simulated) time. The M(foo) means "The message5 E$ t W& T. I7 s! g
// called <foo>". You can send a message To a particular' A3 b" L9 w9 R. J# Q4 f7 E
// object, or ForEach object in a collection.
+ N. P; F( {+ a6 g" _+ m
6 w) Q! s! |) r0 U( T // Note we update the heatspace in two phases: first run
' a( F8 n0 [+ u3 O& f3 q // diffusion, then run "updateWorld" to actually enact the$ E; ?% L7 j, s3 o' F% M/ J
// changes the heatbugs have made. The ordering here is3 o& g- L% D! Q4 {& Z
// significant!
+ U, H/ A, c+ k0 w$ \$ Y
1 @; l: r+ a3 F; N3 m // Note also, that with the additional4 R% J1 [. s4 ?5 ~
// `randomizeHeatbugUpdateOrder' Boolean flag we can9 i8 p* o) @8 [* P' Z( q5 d6 s
// randomize the order in which the bugs actually run+ |7 K( F j3 q9 N! t
// their step rule. This has the effect of removing any
% v3 R9 r! g9 W0 H" R1 h // systematic bias in the iteration throught the heatbug# g' J4 B' Q u! k1 F) I s
// list from timestep to timestep. q, c+ d) T4 ]" M4 K
* \% q$ T" _, [' D: c% m
// By default, all `createActionForEach' modelActions have
. H% w1 e- N' ?7 ^2 } // a default order of `Sequential', which means that the4 X5 F$ l/ ]6 O- ?8 z, _$ b, Q
// order of iteration through the `heatbugList' will be1 X! P: G- }$ u+ w. D
// identical (assuming the list order is not changed5 \/ |3 o1 x+ \5 x1 T$ K7 ^0 _. J2 M
// indirectly by some other process).
) p7 _6 |6 j: y( n# K2 } + `5 b9 O% t4 v8 J, Z
modelActions = new ActionGroupImpl (getZone ());
9 @# O2 ?2 i; A0 p3 c
0 ]( l" ]! K+ D try {4 A6 _$ D2 p5 [3 C& e2 ^- m1 w" E
modelActions.createActionTo$message7 U+ S% i1 j: v D M
(heat, new Selector (heat.getClass (), "stepRule", false));! N8 G2 D: l' |# C; K
} catch (Exception e) {
+ F7 y( }" J6 @ System.err.println ("Exception stepRule: " + e.getMessage ());, \0 |5 g- M) T# g6 S
}
( l; v) p& D* o$ M4 _
^' k' V6 r1 [: w9 {) D try {9 `& ^. z5 u6 O h
Heatbug proto = (Heatbug) heatbugList.get (0);9 n+ w6 y3 F. y( K6 g( B; g
Selector sel =
# ^& k! t/ z8 J- _4 [* E( p new Selector (proto.getClass (), "heatbugStep", false);
( ]' |' h3 I7 \ actionForEach =
! z- k3 a. f& e+ _2 [7 z3 N, E. \ modelActions.createFActionForEachHomogeneous$call7 S' k4 E0 o4 S: Q9 n
(heatbugList,
' u+ G; G# N2 A7 ~ new FCallImpl (this, proto, sel,; P$ P) M$ I: t. j" o7 j
new FArgumentsImpl (this, sel)));7 A8 h! z1 [1 P5 F3 W
} catch (Exception e) {
! F- r# N) h) I0 j, N! v e.printStackTrace (System.err);
' t& f) _; P5 ~; a }
% [7 j5 e# y2 s5 D ; R) k$ I$ ?% C7 f7 R* Y# X
syncUpdateOrder ();# \6 x6 c- }" t/ J5 G
$ c2 H/ c: q4 L0 K- {
try {
; f" V1 n8 N# X+ X1 o. e% X modelActions.createActionTo$message % l2 A' ?% e. ~5 |
(heat, new Selector (heat.getClass (), "updateLattice", false));1 m; Y, r8 y- W, v& m( q
} catch (Exception e) {- X7 P& b5 r. v* Q3 O
System.err.println("Exception updateLattice: " + e.getMessage ());
7 h$ N$ Z7 V- s. e# ] }
2 V- Q( Y( P# C8 t ; c5 Y. k' C$ _3 W3 n
// Then we create a schedule that executes the( \+ }! ]/ |6 O; [5 s$ L9 C. n
// modelActions. modelActions is an ActionGroup, by itself it
2 }6 ~/ J; y7 p) H D // has no notion of time. In order to have it executed in
5 J0 D2 d/ M, z9 K6 V; U* i/ A // time, we create a Schedule that says to use the- L% c9 D& h# `0 J# P1 R G- S7 `
// modelActions ActionGroup at particular times. This
# Y0 C+ c8 i; ] // schedule has a repeat interval of 1, it will loop every: q# Z& N2 m9 }3 R5 t
// time step. The action is executed at time 0 relative to4 {" ~7 u! M$ W' U/ q* m
// the beginning of the loop.6 C6 K& o; P) L& Z! E
5 x. u- Z) r! N- ~ d4 {
// This is a simple schedule, with only one action that is
$ k8 a' _6 n r$ ]" G: i; @1 U // just repeated every time. See jmousetrap for more
$ X9 r9 Y: o! X( d) i# Y( `0 G // complicated schedules.& f6 v7 X# t4 s$ e9 W- `
+ b' ?' }! R7 ^# q
modelSchedule = new ScheduleImpl (getZone (), 1);$ p6 B3 p/ x, }+ W
modelSchedule.at$createAction (0, modelActions);: {& e& J0 R' C4 T+ s$ l
2 Q N, K$ H$ z5 P; q9 _ return this;
+ `# l- i. o& C7 V" t } |