HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 \6 m* P+ J& U: i3 a8 F/ E3 o% c# {" A. K, z5 |+ `
public Object buildActions () {6 a: m7 S* G: x) o# _. m3 I
super.buildActions();
& Z/ [+ e8 t; Z, W 5 j8 v" F+ b% q, f9 I4 t* G' z% K
// Create the list of simulation actions. We put these in. ?+ {, O/ G; m) j4 T
// an action group, because we want these actions to be' \+ {% p& Q: ]2 U7 Z3 H# U4 b
// executed in a specific order, but these steps should5 ]% `9 j9 ]5 y. B# y" B2 ?) M3 S. x
// take no (simulated) time. The M(foo) means "The message
: h1 G5 x5 P$ c2 h4 W+ i5 z- h // called <foo>". You can send a message To a particular
w. s" K2 J5 ^% F7 U, j8 b // object, or ForEach object in a collection.
J, i6 |" A- m$ P% `0 K+ a( V" z
& ~- W2 G$ l3 B5 h7 ] // Note we update the heatspace in two phases: first run
9 }& E7 y8 x4 j6 j" X9 k8 E6 F // diffusion, then run "updateWorld" to actually enact the7 b& M* J8 q( \+ ] H) U
// changes the heatbugs have made. The ordering here is" w# @" u' g' k- X0 _
// significant!
# T# V2 o+ X0 R' B 2 h9 R* |# [: u0 u# x' }5 T! Q
// Note also, that with the additional
p3 L, h' ~) N z% m // `randomizeHeatbugUpdateOrder' Boolean flag we can5 Z0 ?5 o; ^: \. Z* r/ u
// randomize the order in which the bugs actually run# C6 j. W( F: e/ Z
// their step rule. This has the effect of removing any
# x/ r2 l5 R) I; a. c" f. F0 _ // systematic bias in the iteration throught the heatbug
0 l9 I. Q+ h3 }/ y // list from timestep to timestep
; A! Z! z! f9 }/ D 7 @- b) n4 B7 z
// By default, all `createActionForEach' modelActions have, E1 h) a, e# }! g. W) B5 l1 c
// a default order of `Sequential', which means that the
7 q2 ?# S6 l) S% v // order of iteration through the `heatbugList' will be; l% Q3 g' d0 ^" z5 y3 N
// identical (assuming the list order is not changed; D: b7 y& h8 C' I4 ]0 E$ I5 I
// indirectly by some other process).) z' Q5 ^' u0 H0 s) [' p) j
8 ?; O2 G8 j+ B9 c
modelActions = new ActionGroupImpl (getZone ());- b. v9 N1 W. ~
6 }& v- p9 ^5 x% k0 z/ Q
try {/ e" H' I! i- i6 y1 ~
modelActions.createActionTo$message4 c. ~; D8 _5 j$ F) E; B
(heat, new Selector (heat.getClass (), "stepRule", false));6 c# Y0 d3 x5 z& Z7 Z+ C
} catch (Exception e) {# G8 j: A& l% N* J+ z" S, x. G$ z
System.err.println ("Exception stepRule: " + e.getMessage ());
% h2 d/ O, ^, C }+ Q! w# M8 m( @4 ~, U' G
% Q1 T: u- x- @+ C7 W, ?
try {
$ U( u, f a8 X9 A# U. P Heatbug proto = (Heatbug) heatbugList.get (0);
3 y; W: r5 N1 V2 t0 @ Selector sel = 5 z5 X) Y: C! b5 L! A
new Selector (proto.getClass (), "heatbugStep", false);& s, H1 m, s) l$ z
actionForEach =
9 G% |, o% m3 u+ C+ D0 k modelActions.createFActionForEachHomogeneous$call, v; f. x! { Y7 a6 s
(heatbugList,
9 O: x& H, b( U; f new FCallImpl (this, proto, sel,
$ s; Z- A: v' [2 `$ z new FArgumentsImpl (this, sel)));; [4 G, w' p, ^8 d; T0 n0 Z, q
} catch (Exception e) {
~& Q5 X. o# ~ d3 o; { e.printStackTrace (System.err);% f7 V' g8 G$ W$ o; S; h
}
8 e/ g' T+ R) j7 `( x& q# k; h% T7 b8 _ 0 ^+ i& c' g% \. o( F
syncUpdateOrder ();) W" _( Q' H5 v% e( \6 u4 F: D
+ y* w6 W& [" e2 t! o2 P9 ?
try {1 X* e4 q5 Z& y' W
modelActions.createActionTo$message ! L* E; E9 W }, O# E
(heat, new Selector (heat.getClass (), "updateLattice", false));
% ^) G! L$ ^' ~5 i9 e } catch (Exception e) {1 p: ?2 B9 Z' T9 p0 A$ f
System.err.println("Exception updateLattice: " + e.getMessage ());
0 M+ x8 }9 D9 c) j6 l }
8 ?$ j" x8 i2 Y' `& u7 E
; d$ l2 \5 [% s( R. } s7 t) l, r // Then we create a schedule that executes the
5 W5 ^2 E d* `+ ^- b4 n' T // modelActions. modelActions is an ActionGroup, by itself it
$ x& \# M) l x5 J0 i& _4 V // has no notion of time. In order to have it executed in
% W, R9 e6 ~1 ]9 R! q z" u // time, we create a Schedule that says to use the
2 C4 w: J# u# L // modelActions ActionGroup at particular times. This7 N K+ t: f# f. }: e: O1 v; W
// schedule has a repeat interval of 1, it will loop every3 Q% T- @. V# k- R# {
// time step. The action is executed at time 0 relative to
5 v+ K' P- }4 Y // the beginning of the loop.
: ]) x$ l, K! M, y$ |( X. h& G1 B
: K, L7 [% N' d$ h // This is a simple schedule, with only one action that is) \0 @; ]' i$ f& g0 o" P: @; i
// just repeated every time. See jmousetrap for more5 t3 g4 y3 V }
// complicated schedules.
0 _7 o4 j# e1 H : @7 |* }: D- [7 V# d" ]
modelSchedule = new ScheduleImpl (getZone (), 1);3 p, v' _2 ?7 X) _$ V& U
modelSchedule.at$createAction (0, modelActions);- f" B7 W) R7 N3 U4 ?7 Q0 c
% b* \( Q, L7 P1 O# }# l k
return this;$ m6 ~8 N( k6 S; z' e) @% y
} |