HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
m. }; U6 z# Z+ f' U7 ^% ?8 Y+ V9 p
public Object buildActions () {
3 F/ I) P; ?/ f1 e* D super.buildActions();5 M v9 s& z: Z2 J. W ^
& M v; a" Z6 ` // Create the list of simulation actions. We put these in" ~4 _# _; }9 x& L: l6 P
// an action group, because we want these actions to be X- @8 z! }; s7 L
// executed in a specific order, but these steps should* T3 y9 k6 H, a4 z* }& ~
// take no (simulated) time. The M(foo) means "The message8 d8 t6 f. t) ?. r( Q
// called <foo>". You can send a message To a particular4 x+ M8 D0 B/ ^5 `) C( c" x$ W
// object, or ForEach object in a collection.
3 v# o8 N" S" L1 n2 X, g1 {3 |9 Z ; C2 y6 A! Y$ t, V
// Note we update the heatspace in two phases: first run( G* y& ?; y' M- H7 F0 B
// diffusion, then run "updateWorld" to actually enact the
* F! T$ f- }% { ^; t // changes the heatbugs have made. The ordering here is
' j# X$ m# c/ h // significant!
+ y1 s) F! L2 q% V* G6 ^
5 C" r) L; ?% C+ j // Note also, that with the additional
3 d4 V1 D( K) D' m0 [ // `randomizeHeatbugUpdateOrder' Boolean flag we can u* v/ j J( k& q( I& X7 W9 T7 q
// randomize the order in which the bugs actually run
/ u- L4 B' j! q+ F% u // their step rule. This has the effect of removing any
: U7 S2 a/ b- n d2 B$ I* V7 } // systematic bias in the iteration throught the heatbug
- d9 ^: X' F9 T // list from timestep to timestep6 v" B6 R' w1 k, H
" O8 K& L3 o8 o9 ?/ P
// By default, all `createActionForEach' modelActions have$ |5 N9 L, Y. h# O, y/ v
// a default order of `Sequential', which means that the; K' ?! g6 ?% R! T6 r6 ~
// order of iteration through the `heatbugList' will be
% [3 f; J/ k& Z) N! R- Q5 @5 ? { // identical (assuming the list order is not changed" G" U, c8 e8 {4 i3 z: A
// indirectly by some other process).: [# r% o( p4 ~$ \9 d
! X2 z B3 |- K" Y: }1 n
modelActions = new ActionGroupImpl (getZone ());
! l2 U- l3 d0 O4 Q6 Y1 \; u
9 l$ x0 l5 ]0 V try {
5 I5 Q& n4 v) H; v0 [ modelActions.createActionTo$message* Z' e" N$ F+ \0 y+ o( {' M
(heat, new Selector (heat.getClass (), "stepRule", false));- S4 F3 F4 v* `+ e3 f
} catch (Exception e) {
0 m) m3 Z5 p& s+ Q3 U& @% A7 J System.err.println ("Exception stepRule: " + e.getMessage ());6 _! @* u) o& A% \
}* x# s8 V' r6 L+ Y1 K
+ n! b/ d+ M9 f- g$ D4 S } try {
" n0 }' B" {6 a8 Y% t Heatbug proto = (Heatbug) heatbugList.get (0);0 \- E9 s7 r: O" g
Selector sel =
& d% A* i- ]6 s! P new Selector (proto.getClass (), "heatbugStep", false);) t3 P. N2 n: `! B6 q. }
actionForEach =
_1 t6 L3 x# f- c& M modelActions.createFActionForEachHomogeneous$call
6 A; r0 @3 ~7 c! N8 A6 r (heatbugList,) v+ F3 Z' v, G) T/ k- U5 z) d
new FCallImpl (this, proto, sel,
4 g( d' U; j: K1 v new FArgumentsImpl (this, sel)));
: N3 E$ Q. ~ V5 r9 Y' W d } catch (Exception e) {+ s3 b! Z5 w$ C! k9 {3 z/ O
e.printStackTrace (System.err);" [9 G1 c. u f5 K9 \ t2 f( T
}
1 y% Y8 y! n) I7 I* `8 \' Y
" m4 i, k. z9 l5 v# N syncUpdateOrder ();" h$ X9 P7 N3 Y4 ]) l' o
4 s; |8 @0 G! n& z8 \
try {" _/ a$ g& N A" ~3 i: a5 t) U5 N$ o
modelActions.createActionTo$message ! [8 r9 ]# H" e: d# j
(heat, new Selector (heat.getClass (), "updateLattice", false));" F+ t4 [/ Y* e3 W+ z1 s
} catch (Exception e) {: M4 h: M! g- @2 _
System.err.println("Exception updateLattice: " + e.getMessage ());% Z' G7 ~6 ?5 o% i
}
. k+ k" u7 S( |+ N 8 E7 i3 u/ \. f+ Y
// Then we create a schedule that executes the+ y9 P. G1 ]& y2 U
// modelActions. modelActions is an ActionGroup, by itself it
/ i. q' x( O8 V: Y // has no notion of time. In order to have it executed in
# J/ {" n0 U" l8 E // time, we create a Schedule that says to use the8 A, O! U; a9 @+ W4 L& K
// modelActions ActionGroup at particular times. This
2 E) B0 |$ @) ]( ~, J: e) z // schedule has a repeat interval of 1, it will loop every
. b( _' r* t3 ~# o2 f // time step. The action is executed at time 0 relative to
5 q: M6 q, S. g5 v/ z. \ n- J // the beginning of the loop.8 m. ?" i8 I9 \$ a0 l* T
7 g; N: g x* ]) J9 b* w4 x. D // This is a simple schedule, with only one action that is: h2 E7 s7 [0 }, m
// just repeated every time. See jmousetrap for more$ ^# X6 a5 ^" C) C7 _ t5 K
// complicated schedules.
7 B6 y7 y, B; P- \0 q
. g! W& h" h# C' T+ Q. E modelSchedule = new ScheduleImpl (getZone (), 1);; U9 L% l4 S8 C0 P: R
modelSchedule.at$createAction (0, modelActions);
$ u: n+ G& `( t! h. [ 4 d9 q( L- C3 R3 u. L
return this;" g ^2 X- [8 u* ^- \
} |