HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' z( |/ b7 ? x8 }. q$ G& |: d. N2 L3 i3 Z# r
public Object buildActions () {6 I( w# W: ]( e1 ?6 [7 u
super.buildActions();) O o; p3 a2 T$ D0 k
3 ^: a3 X" x8 S% M# J0 q) Z // Create the list of simulation actions. We put these in0 x4 Y- \ R$ A. l
// an action group, because we want these actions to be e9 O+ J9 z' b0 v. h4 C0 x7 b# @
// executed in a specific order, but these steps should1 P. A8 ?7 s. @" S% D1 ^, X
// take no (simulated) time. The M(foo) means "The message
# V' p. d# a' L6 K // called <foo>". You can send a message To a particular
% m: W- o; I- P5 p; `5 g/ z& h0 o // object, or ForEach object in a collection.* r, |. D- P5 b6 ?
9 V0 R' k. n" G4 Q
// Note we update the heatspace in two phases: first run D: X) s: W; b7 a& V% L
// diffusion, then run "updateWorld" to actually enact the
0 X+ | N7 e, c0 Z* G. b // changes the heatbugs have made. The ordering here is
+ `% n* Y$ c% w5 h // significant!) y2 t: P7 e6 H
4 u9 \. D b5 G8 x# N# P3 U3 }( H9 ^
// Note also, that with the additional/ `& v/ Y* i0 [& D' l3 Z
// `randomizeHeatbugUpdateOrder' Boolean flag we can9 }/ c+ P6 `) B; f: J! U+ j/ J
// randomize the order in which the bugs actually run
% g6 y8 Q/ i' _, Z1 q8 c // their step rule. This has the effect of removing any
0 e v. s0 {; |1 d) z // systematic bias in the iteration throught the heatbug
) O, ^) u( T! _7 Y/ [6 V // list from timestep to timestep5 p! H0 | y; K5 d) u2 ^
! n% @7 K, @0 J7 i3 Q/ S' l
// By default, all `createActionForEach' modelActions have
; G0 w- s: E( ` // a default order of `Sequential', which means that the
: a( H3 I& W+ R& L0 ~ // order of iteration through the `heatbugList' will be
4 G# w: n0 k) ]7 y0 [; K9 ^& R // identical (assuming the list order is not changed
; ?, C7 d0 ]$ t // indirectly by some other process).
/ n" u, Z; R1 G; x* I# n $ p7 S: T1 v* n1 o$ g
modelActions = new ActionGroupImpl (getZone ());! T, _+ }- Y% T( o4 D) F
2 ~6 O. q" \2 w; n" s0 A try {: x3 l* E+ C0 K H8 L6 R9 |
modelActions.createActionTo$message3 f, E+ R6 E, A& u# } a5 l* o
(heat, new Selector (heat.getClass (), "stepRule", false));
1 U- V* R2 G' t l5 {$ U } catch (Exception e) {
$ H$ B! p5 N. a" |$ I) o% [1 A( Y System.err.println ("Exception stepRule: " + e.getMessage ());( e& I$ \- i* L0 ?: N" B$ u
}
! A5 D' N5 B# T$ \- J9 l* S! x- t5 Z# u- |, V
try { V v! O7 h$ [1 K& L; d y) z
Heatbug proto = (Heatbug) heatbugList.get (0);
2 w; z( v; r% T" v% G Selector sel = ! `( Y C# ?) B) e, A
new Selector (proto.getClass (), "heatbugStep", false);
- ?- P5 y) c, X4 ]8 ^' \0 i' U [ actionForEach =
* H% K8 x* F/ a0 ~ ?: l& k modelActions.createFActionForEachHomogeneous$call+ [8 k x9 }4 x9 k* `1 V0 p" j
(heatbugList,
% F4 H; s) y/ o1 U! M new FCallImpl (this, proto, sel,
# D# c/ w% _9 I/ [; z0 R' Q new FArgumentsImpl (this, sel)));, x. K: e. c0 b* l, G3 s# x. w P
} catch (Exception e) {
/ B. u' ^+ k6 T F$ e# F e.printStackTrace (System.err);
% F# ], L, @( E3 D1 }7 ^1 z) p }
! y6 l% A! [- k& |8 X0 t- n
P9 ]6 w. ^8 O) e0 X: r syncUpdateOrder ();4 ^* F A- {. p7 m1 m" E
2 X6 E6 D1 w) ^! y" Y; H5 f try {- B+ _* |8 ]8 I& h
modelActions.createActionTo$message ) Q1 ~% a6 P5 F$ M
(heat, new Selector (heat.getClass (), "updateLattice", false));5 d! ` M, j( h. L% R# r9 N
} catch (Exception e) {; J: h. r( s. Y" P* Q) I- V
System.err.println("Exception updateLattice: " + e.getMessage ());2 B( l9 W& [* d4 D7 ?
}; S* [7 T1 S7 y
+ ~0 I, y/ \% Z, S5 _: }" L
// Then we create a schedule that executes the
, C" a, w6 [9 O // modelActions. modelActions is an ActionGroup, by itself it
4 ~7 Y; T, C1 b3 E' v8 ]" l: z // has no notion of time. In order to have it executed in5 x$ G2 s' @9 q
// time, we create a Schedule that says to use the- D/ n# l- t! x5 L
// modelActions ActionGroup at particular times. This
7 Q/ @+ ?2 n& X- w) s // schedule has a repeat interval of 1, it will loop every
+ r3 t* b8 A/ X1 V/ K( v // time step. The action is executed at time 0 relative to
% A: B7 R- g U# c3 c9 _ // the beginning of the loop.
; w' ~" ]) L4 C3 I6 E
8 n( \9 ^0 C5 R+ M // This is a simple schedule, with only one action that is* Q7 e) C$ Y4 Z0 I
// just repeated every time. See jmousetrap for more
6 o: B( G* D+ m // complicated schedules.
8 I% a, l2 X, c5 b & J$ Z, G$ ?0 b5 Q l; n+ `
modelSchedule = new ScheduleImpl (getZone (), 1);! p, B6 ?( x0 B0 Y4 g1 R' L ]
modelSchedule.at$createAction (0, modelActions);' ?0 }/ o' ?" f2 ^) z
6 U, K) z: X7 x0 D3 b return this;( S$ V" M6 L. R# ]$ U
} |