HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' s5 Z4 C/ J( |3 W, O
( y1 @, J) I. g- a' g) c- J public Object buildActions () {
1 S/ F, J4 r. j E super.buildActions();. |0 {5 f/ w. c( r3 v, H4 w# g
3 a0 C1 F" R8 Q // Create the list of simulation actions. We put these in
! e5 |0 k1 B. x# }" s$ o1 R // an action group, because we want these actions to be& V: ?- j! H* K2 P% o
// executed in a specific order, but these steps should$ l$ W! G4 l0 t8 H1 o& _* C. P5 u
// take no (simulated) time. The M(foo) means "The message
. }4 r; m7 ? l+ K3 U, i // called <foo>". You can send a message To a particular5 N/ P, T3 o: L7 [. H
// object, or ForEach object in a collection.4 V# P+ ~7 K/ M4 m: ^$ B2 M
A6 a8 |3 \* g, ` // Note we update the heatspace in two phases: first run
0 Q) ~" e4 F7 ?( F1 x4 W H" l. f/ X // diffusion, then run "updateWorld" to actually enact the' a7 f" \8 v' c$ T: [
// changes the heatbugs have made. The ordering here is
( F. d- K. ^+ R9 e3 s // significant!: G4 \( J9 ]5 z3 E- L+ P$ H
o0 ^0 S7 M {1 L( j) g
// Note also, that with the additional8 Y9 h& m/ c( X2 T) d3 h
// `randomizeHeatbugUpdateOrder' Boolean flag we can
1 I! J& |7 E4 ~. E. ^2 E7 v& h // randomize the order in which the bugs actually run
$ u/ m2 r3 U( [: M* V' d& f // their step rule. This has the effect of removing any
+ R6 g* @4 A2 R0 B% P, ^; X0 p; }3 u // systematic bias in the iteration throught the heatbug, q a2 r5 p, E9 t
// list from timestep to timestep4 [0 y4 d0 [( H/ |' P
8 `5 r( c4 F6 S9 D
// By default, all `createActionForEach' modelActions have
) u4 @9 E3 ?4 V) ]0 ]2 @& ` // a default order of `Sequential', which means that the9 U6 h6 J1 M0 Y0 k( a3 Z+ D
// order of iteration through the `heatbugList' will be8 u% |7 b6 y5 w: m- K9 d) k
// identical (assuming the list order is not changed
0 }4 @. E" |4 S9 K // indirectly by some other process).
5 u+ l8 q3 G) I% ?; B: E; C
) B p; a2 C6 t" f- N modelActions = new ActionGroupImpl (getZone ());0 G/ y' a- G$ W' k U. G1 i$ V' v
& l: V' C; m4 x) X try {
, V1 r( G" N* [+ p$ m9 r2 t4 [ modelActions.createActionTo$message
* m y d; n1 y, D0 i. s4 ? (heat, new Selector (heat.getClass (), "stepRule", false));5 B- u. M% I/ z4 Q
} catch (Exception e) {% S+ o% n# m" ]% T7 e k4 x
System.err.println ("Exception stepRule: " + e.getMessage ());* S a0 Q0 c9 m6 S
}1 n( m! t" v$ x# ^+ D% d" b
, f* ]0 [2 U3 [" ` try {
+ V% g& O+ B- t; Z" R: ~1 @ B Heatbug proto = (Heatbug) heatbugList.get (0);
K# c& ? q; V9 E# S* o: S Selector sel = ( ^% C3 v+ J2 D/ B6 d) d9 r
new Selector (proto.getClass (), "heatbugStep", false);
2 _7 G( ?( a2 P, f actionForEach =
4 I2 n: T$ W% a; y/ y) c modelActions.createFActionForEachHomogeneous$call. T: k, s% ?3 ?9 I8 g
(heatbugList,2 t: G# q3 b( B2 c4 T) Q
new FCallImpl (this, proto, sel,
+ a8 ]$ W8 y) N/ P, Y$ z. C& J new FArgumentsImpl (this, sel)));* @3 a$ i1 U# ^& ~
} catch (Exception e) {
( k- [/ \$ n3 d8 I e.printStackTrace (System.err);
6 X6 `: e( X5 E6 ~5 ~# { }! @7 J; i0 L" f/ b
1 V/ @7 X- r/ u3 j
syncUpdateOrder ();
k. K. t# b: b; ^% [0 l6 {* l" S7 L; ]$ x7 O5 x. T
try {
7 T8 {2 A0 A; M modelActions.createActionTo$message
/ r$ v/ Q$ S8 i$ y' Q1 A (heat, new Selector (heat.getClass (), "updateLattice", false));; e* }7 z- T6 R* n5 u! u. f
} catch (Exception e) {5 c6 Y* ?9 N) b+ x
System.err.println("Exception updateLattice: " + e.getMessage ());
& x9 J% ~% o/ s9 E4 j }- N! g* r c* a
% }9 Z" _ X) s0 a4 O; K
// Then we create a schedule that executes the* B# K8 V! z% W( b! h
// modelActions. modelActions is an ActionGroup, by itself it
# \- w7 W9 X% c6 X // has no notion of time. In order to have it executed in0 `' b# q7 F, @, L
// time, we create a Schedule that says to use the
0 ~" _- C$ I& g7 `+ M% [( C // modelActions ActionGroup at particular times. This
^" s# f' t% z& k# u. V% @' D // schedule has a repeat interval of 1, it will loop every, D) K& U' H; I: S0 \; f
// time step. The action is executed at time 0 relative to1 a. m- P# g& V$ H6 G! U9 B' E0 C* k
// the beginning of the loop.
/ T2 o/ F) N& I9 w
' { Z" s* X0 S; b( Z4 m // This is a simple schedule, with only one action that is& K7 Y; L8 J+ J$ _5 V7 o) g Z
// just repeated every time. See jmousetrap for more8 R& E+ V0 Q* T# {; {0 G( K( E
// complicated schedules.
' E `: a" c5 d! |. W 4 f0 {7 c ?+ `9 W
modelSchedule = new ScheduleImpl (getZone (), 1);
* n* F I) c5 |8 Z' L8 \% ^/ k modelSchedule.at$createAction (0, modelActions);
5 g" S# G' t9 J* P
4 {; v" _5 a1 [/ W& ^ return this;
% `, ~5 s) E+ J4 X( H1 g7 b } |