HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 b/ u% Z. ~- G% ~- `4 o9 t+ E" N& g- J. `' e) M8 ^1 w+ t$ L
public Object buildActions () {& N& V& V0 X( t8 O# U4 h
super.buildActions();5 v. I1 z$ `8 H4 J# n
% x( `7 C0 k. {$ ^; P f$ N
// Create the list of simulation actions. We put these in
$ Y1 W0 X1 E& U4 C' j5 t // an action group, because we want these actions to be
1 S: C* D0 C. Z' j# {( q* Y // executed in a specific order, but these steps should+ x) B* n E( C! ^" {
// take no (simulated) time. The M(foo) means "The message' A! s2 f; M" }& n
// called <foo>". You can send a message To a particular
$ R- j& v* R: x9 s' L // object, or ForEach object in a collection.) y$ G! O5 }. b: w( e
, ~+ v" }7 l, V7 [$ O, Z // Note we update the heatspace in two phases: first run5 j1 i) g7 i, S, G
// diffusion, then run "updateWorld" to actually enact the
) ~/ x. Z2 E0 ?# ^/ l' T // changes the heatbugs have made. The ordering here is, z) l& R* l; I4 L# l5 f
// significant!
& H( `% G: y$ |) \; x
' C; c1 n9 v; Y5 J! G" i // Note also, that with the additional+ Q( ]. t( L! X ]5 s
// `randomizeHeatbugUpdateOrder' Boolean flag we can
) H/ W3 q) o: L. t // randomize the order in which the bugs actually run
6 s+ m+ x" r9 v1 a# h* U // their step rule. This has the effect of removing any
5 A- J2 N4 k# f$ f& D7 h1 r1 q z // systematic bias in the iteration throught the heatbug' `; W' h) M% A; V( P/ b
// list from timestep to timestep% x1 q+ j' \5 I" \7 e
# `" }! x/ A* u2 _4 g% Z0 s! i& g // By default, all `createActionForEach' modelActions have' [; ~- g7 t% ?$ W2 z# |
// a default order of `Sequential', which means that the
' v4 L- X2 _% F) I1 h& o // order of iteration through the `heatbugList' will be
$ s+ f5 Y( S1 v* b- @6 O // identical (assuming the list order is not changed
) H4 U8 B: a0 B6 j3 |6 Z1 W // indirectly by some other process)." Z* ?. J& x8 D2 C( v- a5 @
) f I8 ?, O4 M
modelActions = new ActionGroupImpl (getZone ());+ i1 q; I/ z& |! d7 [5 t
# E- |1 I; a7 P try {
/ u0 ?' R6 G7 T/ m' d1 l: \" G modelActions.createActionTo$message/ i0 b3 R; C' |7 r3 ]
(heat, new Selector (heat.getClass (), "stepRule", false));- o) ^' ~4 O6 B9 _7 B: j
} catch (Exception e) {
* U$ o/ e6 _2 ^" f( L" d. o0 G System.err.println ("Exception stepRule: " + e.getMessage ());
& _$ |3 R+ ]8 g }: r& Z& p& I0 ?; j$ D
6 I7 c, t' b$ N# f; @4 M
try {7 f8 T# [) G# U( a) F; L( [
Heatbug proto = (Heatbug) heatbugList.get (0);% P q) ?3 M2 F* u, R8 l( m2 t
Selector sel =
/ G2 x3 X( ^7 s" ` new Selector (proto.getClass (), "heatbugStep", false);) y j) K6 P$ {+ o4 M' ]
actionForEach =
* e# E, @# c, ~9 u# X modelActions.createFActionForEachHomogeneous$call* F. v+ _. O% y. z
(heatbugList,
, I! ?0 d! Q' C$ S& Y) F9 J, |2 t new FCallImpl (this, proto, sel," t5 ?* a4 w5 ~2 U& M, G0 ~
new FArgumentsImpl (this, sel)));
: A8 w; W( P5 L' [) @9 Q# u! s } catch (Exception e) {0 K1 ?* G) O* t c
e.printStackTrace (System.err);0 e6 U( O. O, S: f& g4 @
}
0 I3 c# j& B. ?+ a! M: M5 b % [+ V( q7 M5 E) `; P& ^
syncUpdateOrder ();; o* I9 K/ Z# r( |+ {1 f6 z
. A+ V. L( X8 \5 Z7 }
try {
+ E1 @8 K- }" k6 k# C+ Q+ l" S5 ? modelActions.createActionTo$message
3 G8 V5 P- m* h, G9 d (heat, new Selector (heat.getClass (), "updateLattice", false));
4 [* f3 Z8 s0 ?) ^: n } catch (Exception e) {$ y# ?3 a, g/ e' f) S/ C
System.err.println("Exception updateLattice: " + e.getMessage ());
' [+ V2 b" y: A8 T+ ? }. ]5 K7 `3 j# l" r$ H! N1 ]. {
" Q: f( O1 s8 |- q
// Then we create a schedule that executes the
5 J5 ~. P/ z" B% R& p/ H // modelActions. modelActions is an ActionGroup, by itself it0 ?) m9 \/ I, [ ~" j: H
// has no notion of time. In order to have it executed in4 \" f# d/ a" _7 `( V
// time, we create a Schedule that says to use the
4 @. @3 O8 L# f6 C# d$ m1 H$ f // modelActions ActionGroup at particular times. This7 j/ H; d1 B( x0 c
// schedule has a repeat interval of 1, it will loop every
! L( }1 f- f$ `1 I6 N // time step. The action is executed at time 0 relative to/ y9 y/ R$ y3 U; J7 r
// the beginning of the loop.
+ U3 J( \. V2 M6 p; a9 Y0 K- V/ m( \9 c5 N. U, u- }$ o. h; [
// This is a simple schedule, with only one action that is! T) w) q) }8 M: a7 k' ^/ I2 x
// just repeated every time. See jmousetrap for more
9 i; ^5 e# ]) o/ } u, [ // complicated schedules.
' Q h4 w" j3 Y: {( k1 p$ |
" x- [( H) g, B) z modelSchedule = new ScheduleImpl (getZone (), 1);+ T w9 D6 H% l; p- S" l
modelSchedule.at$createAction (0, modelActions);
/ K- B% q2 G W7 ? ; I' Z" G! e. E
return this;0 ^$ [8 W6 x7 v8 c8 a
} |