HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% K/ n6 ^! C* N4 B1 G3 {) }4 x6 a/ ?5 P! ~% T/ x" s
public Object buildActions () {
8 f' W: e% O5 r5 X1 E super.buildActions();
) s7 J; n4 U+ ~ g% w7 J H % J5 \' K* S8 V0 d/ ~
// Create the list of simulation actions. We put these in
3 K) z& l$ d) E3 x) Q' U- F: B# ^ // an action group, because we want these actions to be
3 n$ R: P% j; J+ R8 ^ // executed in a specific order, but these steps should( m4 t# n5 S% ^ \' @/ \0 q) \
// take no (simulated) time. The M(foo) means "The message
3 J" f/ W# ?3 [; M) a // called <foo>". You can send a message To a particular$ q" `) J, R2 \* I+ e' Z+ \
// object, or ForEach object in a collection.
, ^6 N2 b" F: Z; N ; [# n6 l: }/ l0 c5 S8 h5 g! S" n! b
// Note we update the heatspace in two phases: first run
: u/ p2 m. b3 Q2 l // diffusion, then run "updateWorld" to actually enact the& R% M- _% S: `4 T! z/ A, l- a2 R
// changes the heatbugs have made. The ordering here is
( z# W1 J1 V. B* _; k3 x0 r X- x2 z // significant!7 @- Z9 }0 a7 k* Q* P& L' I+ v
) q" }* @/ g# C- d/ t* i& D
// Note also, that with the additional
* G0 I" N1 Q; N4 G k- m# X // `randomizeHeatbugUpdateOrder' Boolean flag we can
$ _+ |7 ~" [. w7 W8 }; x% X // randomize the order in which the bugs actually run4 ]7 w1 W( V$ i1 q( L x
// their step rule. This has the effect of removing any- V4 c' o/ j* x6 f. V3 r7 g6 f/ n
// systematic bias in the iteration throught the heatbug
$ @% {$ I" H7 p& @& Z: y! L) J // list from timestep to timestep
x+ Z2 x, V K3 ~9 b- t
5 r; @0 a: u% v4 P& h! w; I3 D // By default, all `createActionForEach' modelActions have
t8 J, C3 s/ x1 r // a default order of `Sequential', which means that the. U7 A2 k( z" l9 m
// order of iteration through the `heatbugList' will be
2 N9 c+ u! H6 A& i% z( L4 ^6 @ // identical (assuming the list order is not changed# ]$ D; L. s6 g* I8 ?, T
// indirectly by some other process).
# c$ x! {/ W; Z H' _7 t) R
% w* T. i5 o% } modelActions = new ActionGroupImpl (getZone ());; a% S/ S/ x4 Y( T, s ]& D6 O
# ^6 @' l% G! B4 p7 m
try {
5 _- K, W& E3 w modelActions.createActionTo$message- N8 N# N* n/ D' u
(heat, new Selector (heat.getClass (), "stepRule", false));
& ?. P& P3 v6 C: U- l } catch (Exception e) {- |; \& @" |+ x* C. K( q, K
System.err.println ("Exception stepRule: " + e.getMessage ());+ A0 D8 J' E3 Q: F4 A
}$ g! H U6 M8 ^# u! u
8 m$ H0 B7 P' q" G0 h
try {4 F" p! P- S1 C8 D5 k2 s4 R& h
Heatbug proto = (Heatbug) heatbugList.get (0);
" S% {! Q/ f$ W; \9 P' ^9 `9 C" S Selector sel =
4 u7 V6 N( e9 ^, y s# j new Selector (proto.getClass (), "heatbugStep", false);/ E# M1 d4 t+ p( o* K
actionForEach =; a9 _3 c/ k& p3 J; @
modelActions.createFActionForEachHomogeneous$call2 S3 Y$ r, ^" t7 K0 y
(heatbugList,
: q7 j9 ? L: ]- P: E new FCallImpl (this, proto, sel,
2 [3 y, w. Q6 G- ? new FArgumentsImpl (this, sel)));1 _+ [/ b2 c9 R
} catch (Exception e) {
?0 b' c {2 m5 t- G e.printStackTrace (System.err);
2 J/ U* H/ m* W }
0 r. q4 H4 H! `7 W ; D8 K# d- ^9 \. ~$ a9 Z3 d+ l
syncUpdateOrder ();7 d2 m# X& w o" ^$ \1 D
% Y1 h, d. @; I
try {
' S; A$ U/ L6 P- G3 v: M modelActions.createActionTo$message & ^ c' k$ z! m
(heat, new Selector (heat.getClass (), "updateLattice", false));
+ O$ W) @/ J2 k! P- y } catch (Exception e) {
. B% L4 X5 s$ E0 j3 N System.err.println("Exception updateLattice: " + e.getMessage ());
8 y) Y) a; j. ^$ x1 ~" g! n }
# l$ Z* M* M% C3 m4 L4 \5 u
1 y) w( \+ [, E6 [+ p // Then we create a schedule that executes the
* W1 [6 p5 @; f1 V$ Y/ |0 K1 ]4 x // modelActions. modelActions is an ActionGroup, by itself it5 C) m) a9 |% [# n; D& h
// has no notion of time. In order to have it executed in
$ n- r; s+ j8 P4 u8 s5 t9 a! y // time, we create a Schedule that says to use the- {- @+ w% V- ^% F9 q9 F
// modelActions ActionGroup at particular times. This! r0 t2 Z4 e5 b
// schedule has a repeat interval of 1, it will loop every# N" e) i3 X1 f' E0 o" J
// time step. The action is executed at time 0 relative to
+ s/ Z: @1 S6 t0 | // the beginning of the loop.
8 x6 v0 o O: J
! i' [5 P' Q1 b8 t. [ j // This is a simple schedule, with only one action that is$ B7 x+ ^4 j7 C7 N8 |" F
// just repeated every time. See jmousetrap for more2 S8 W. i* Z3 r" k
// complicated schedules.. o' U% h, f9 E1 x# l' p. A
- A# @: O# y" t5 t0 M. h/ O modelSchedule = new ScheduleImpl (getZone (), 1);
, O) ]) _$ @) I [5 _9 V3 ? modelSchedule.at$createAction (0, modelActions);/ l% V) X5 j4 r0 \. |! ]9 N
& w9 h% m! ^5 A3 N/ x/ w6 S
return this;
/ s: J% O3 C! M% d, `. ]' _ ` } |