HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
4 C% h5 w1 _8 P$ h. r/ T
9 f3 P/ o+ W$ j; @% | public Object buildActions () {+ e; A0 W( b6 \8 L9 {: {6 C
super.buildActions();1 T, c% e2 D! `0 X! o
. h9 J$ t4 w3 H% f; f // Create the list of simulation actions. We put these in
9 c4 f: o# p2 E5 z! F% M* e* S // an action group, because we want these actions to be( f. y8 ]7 T8 q: g$ G" m
// executed in a specific order, but these steps should! Z8 }' g* l) Y& X
// take no (simulated) time. The M(foo) means "The message
3 y" d9 z2 U* `) g' o# z6 G // called <foo>". You can send a message To a particular
# g: |2 F& f" @# c // object, or ForEach object in a collection.
1 U1 k6 g9 m2 X, M
1 ^9 y. V$ \- t4 m3 F // Note we update the heatspace in two phases: first run
# c2 u, P/ \1 g( H4 R // diffusion, then run "updateWorld" to actually enact the
7 w1 |- m. ?* Y' o0 U // changes the heatbugs have made. The ordering here is
# v5 V/ ?, T# P U! _ // significant!
, X. b% H. F8 Y: B3 D8 ` " j$ T8 X/ f j. f3 ~, I$ j/ ?& S$ A& L
// Note also, that with the additional; @8 J S) ~+ r% ?
// `randomizeHeatbugUpdateOrder' Boolean flag we can
0 G3 K9 A% l- d2 \' p // randomize the order in which the bugs actually run B6 p# F9 q P0 }# @: J' g
// their step rule. This has the effect of removing any+ B- L: c1 _9 j {. z9 J. |/ N
// systematic bias in the iteration throught the heatbug
, @# I4 S& A& E/ C // list from timestep to timestep
& \8 a- a6 [) o5 R5 C% D8 Y
% g/ B. K5 Y! M/ |* r9 x& c: ]9 Q. v // By default, all `createActionForEach' modelActions have1 J% k( { d6 M5 R* X2 G
// a default order of `Sequential', which means that the
8 ]5 y7 t2 Z$ O% Q% C* i. O // order of iteration through the `heatbugList' will be
- I0 ^6 q' w2 h& {/ m1 K7 f7 l6 U // identical (assuming the list order is not changed& [' ^5 U& c9 u
// indirectly by some other process).
, y' K% E4 _- y ?! F- S
% r0 O. |1 P3 m9 W0 Z4 I modelActions = new ActionGroupImpl (getZone ());* M$ O% {2 @* S( Q; H0 `/ r. I- O: v
6 h6 }2 j# V; v: t. P
try {
6 c, ]: d- y4 k modelActions.createActionTo$message7 C# ]) D. p( h# v" ^% k& U
(heat, new Selector (heat.getClass (), "stepRule", false));
+ [7 m% O* e& V! q } catch (Exception e) {2 U. B' j- x* }; L7 M" s- a
System.err.println ("Exception stepRule: " + e.getMessage ());0 e8 O) o% c# r8 C3 M- e( L: X& G. x. v
}
1 w7 i M5 ~3 g# H2 Y" m
$ b1 ^$ h, b+ M! t( B6 B- V try {
7 ?& T9 r v/ _2 }5 W Heatbug proto = (Heatbug) heatbugList.get (0);5 d- Y' Y4 K( x, S9 W9 |
Selector sel = 7 E* _# J' b( p' Z: t
new Selector (proto.getClass (), "heatbugStep", false);2 }! z. a6 k. A s, ^
actionForEach =& B0 D$ g# N, I2 x1 S, i' u- [2 G
modelActions.createFActionForEachHomogeneous$call
# m# `0 k4 t# b8 I6 B (heatbugList,+ ?; L+ Z I @* G, ^5 U% j7 Q
new FCallImpl (this, proto, sel,, |' V2 F) x8 C" s0 X, R/ A6 z3 X4 j5 z* G
new FArgumentsImpl (this, sel)));: `! n/ C3 W& R6 }% A
} catch (Exception e) {% f9 }2 O6 F" L4 r* ^+ j
e.printStackTrace (System.err);
j1 n/ F+ c" s# ^ }6 P. J: P2 Y1 _2 F+ e
9 g) p& X) t9 T4 p
syncUpdateOrder ();
) X: b9 c; X3 ~; M+ q/ w: O; }" L. r; I
try {% Z4 T& m ^: i/ c' e: G9 I6 {
modelActions.createActionTo$message ! t" Y0 U6 B; K
(heat, new Selector (heat.getClass (), "updateLattice", false));
+ |- h/ p# A+ \; w7 O3 G( t } catch (Exception e) {% W2 H4 Q3 r2 e( h
System.err.println("Exception updateLattice: " + e.getMessage ());
5 g3 ]+ k' z# y( B6 n6 s }+ _0 y' k6 `' f, p7 h* z* i8 ~
) E+ t1 B6 x4 T7 c+ i( {0 O* b
// Then we create a schedule that executes the
) G7 N4 v" v9 D2 Y) |9 u // modelActions. modelActions is an ActionGroup, by itself it
: o( p5 K, u' w& ? // has no notion of time. In order to have it executed in- z0 t9 _! z5 M
// time, we create a Schedule that says to use the
1 C# R9 [# y5 H" e0 `! j1 t // modelActions ActionGroup at particular times. This a" F5 c% E0 U, f
// schedule has a repeat interval of 1, it will loop every
7 A' i( R+ x# h! j; q( g/ c' v5 y // time step. The action is executed at time 0 relative to
& |* X) g% ~, z) u // the beginning of the loop.2 c. _, c6 o* N* U. ?
$ D. F9 S" i0 i$ t/ D4 m; M // This is a simple schedule, with only one action that is4 c) X* K9 q! b n0 j
// just repeated every time. See jmousetrap for more' d! w$ ?4 l" A$ l
// complicated schedules.
$ |6 r; j9 R& s& J6 B% J! l* b p k; A- t! p9 W, T+ Y) A: W
modelSchedule = new ScheduleImpl (getZone (), 1);; Y5 x# i, O* |7 a+ P2 N
modelSchedule.at$createAction (0, modelActions);
2 b P$ @- x7 }; J2 M$ L% h+ e1 b
1 _5 @/ O; j# _/ L" X/ Q; v return this;, n6 C+ C" B ^ _) l/ S
} |