HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, v: ?+ `6 P# a- O1 p$ m4 T5 x$ k) y, Q
public Object buildActions () {" R& h7 `& k# |4 B, S* B
super.buildActions();
( f# w' ~. J; r: P" b$ a- B8 B4 b
" A/ S! n% G- }$ \( B+ W // Create the list of simulation actions. We put these in
, c0 z6 [% m8 a7 |6 O // an action group, because we want these actions to be1 }( q- }, |9 |- g, [
// executed in a specific order, but these steps should+ g# ]- Z9 b1 ~: L1 V5 j! P% d
// take no (simulated) time. The M(foo) means "The message; v3 S" P' k8 b. X: X+ u/ J X
// called <foo>". You can send a message To a particular
6 q2 U' ]: Z) y/ ~ // object, or ForEach object in a collection.8 {! b5 `+ y0 W7 B( o3 C: _9 o0 }; I
( T; t1 P" f9 ]! E5 }* a
// Note we update the heatspace in two phases: first run
2 x1 d8 c& |; D$ C/ S! x // diffusion, then run "updateWorld" to actually enact the
& C9 X+ K2 V$ Q: k* S* U // changes the heatbugs have made. The ordering here is5 h0 e6 j/ _8 ]
// significant!
5 A5 i. Y; X' g: i Q5 z* N; N7 \9 ` ) F: l7 d, C7 a1 C) G
// Note also, that with the additional
+ F. T2 O8 ]$ U6 W3 I // `randomizeHeatbugUpdateOrder' Boolean flag we can
- G& D$ f& X$ m/ M/ e // randomize the order in which the bugs actually run1 Z% `5 ^9 J8 q
// their step rule. This has the effect of removing any
9 ? i _& k$ { // systematic bias in the iteration throught the heatbug
1 v! C$ I+ ?5 v x+ f7 G2 M: d // list from timestep to timestep
* G8 M: V( s o3 x! o
, N$ P6 n: f Y1 y+ i // By default, all `createActionForEach' modelActions have" y7 M. u* e# q5 S( C- Y/ E
// a default order of `Sequential', which means that the9 Z, @" X7 U: z2 n d; C
// order of iteration through the `heatbugList' will be" K* A$ Q0 ^$ L% ?
// identical (assuming the list order is not changed
& _1 ^0 S! F9 \. j, E // indirectly by some other process).
5 V3 m0 n1 u# B 4 K% E+ {/ f. ?
modelActions = new ActionGroupImpl (getZone ());
1 _ A" U# \8 }; L2 U# d. T
( q1 u! H- M$ h# Q. O8 F1 w try {
7 j, X+ t2 T: }# r modelActions.createActionTo$message
' o0 O# S$ K8 I+ v7 T: n, S (heat, new Selector (heat.getClass (), "stepRule", false));' w6 O5 ]; @4 h# p, i. b9 N5 U
} catch (Exception e) {8 V1 H* F- C R9 p
System.err.println ("Exception stepRule: " + e.getMessage ());
8 L/ r' K: r: O" A: W) f }
* o- u2 x. P8 @7 ]0 Z! \( ~% \: O" F! j9 h
try {5 Y+ I- u) ?! `' W& [' I U
Heatbug proto = (Heatbug) heatbugList.get (0);% E( R# ^1 z+ U7 i2 X7 _% {/ R. W
Selector sel =
$ l4 n, l. L9 E2 z+ c. ? new Selector (proto.getClass (), "heatbugStep", false);; v0 i: R: d1 k4 U5 i+ G# a, [
actionForEach =
; f+ |5 ?, X! m: T modelActions.createFActionForEachHomogeneous$call& U- |( f7 Y8 H1 o: r8 I' X1 r
(heatbugList,2 t0 V! h! C5 Z
new FCallImpl (this, proto, sel,
6 i" o/ t4 }! n" k6 {( Y new FArgumentsImpl (this, sel)));4 X5 ^% n# L+ V8 Z8 y1 P1 R
} catch (Exception e) {! T8 c% x# x a/ X/ b
e.printStackTrace (System.err);
; }- R& _. k, q0 Y; B }
0 M: N0 _" O5 _ 7 w; ?, y% E8 B, K! k
syncUpdateOrder ();
, \, ]1 O9 z7 L
; o7 {' @" r4 |( E, I# u N try {
7 q4 u K6 C# Q# C6 D* t modelActions.createActionTo$message
1 ` l4 r4 t0 v! @# |4 Q (heat, new Selector (heat.getClass (), "updateLattice", false));, X2 M% ~0 ~+ a" _
} catch (Exception e) {! \* Y" f; q" ` t
System.err.println("Exception updateLattice: " + e.getMessage ());
3 h& `% p n' V$ G/ o }
& K# B7 ?+ y+ Q. v; r . o3 Q- q+ M: q$ y
// Then we create a schedule that executes the8 _& G7 b7 J2 ?: a8 t6 w
// modelActions. modelActions is an ActionGroup, by itself it! z. o" l. j. Q
// has no notion of time. In order to have it executed in: O( t0 j+ J( j
// time, we create a Schedule that says to use the2 G8 O) k* G- [3 J
// modelActions ActionGroup at particular times. This
* b5 H1 F u1 R; c2 A5 R // schedule has a repeat interval of 1, it will loop every: n1 U! H: \7 a5 f$ b' V D
// time step. The action is executed at time 0 relative to
$ l; d- V; `' H- d // the beginning of the loop.
( D& c5 U2 s$ Q: q9 w* C5 Y$ A" e; \! T
// This is a simple schedule, with only one action that is+ A* B0 c8 m, y1 |* S! H
// just repeated every time. See jmousetrap for more, ^8 B- G& ?; u) X- M2 ~
// complicated schedules.' ~( h( @7 }+ N& O' X, N9 a
1 l, R9 j; _) M$ M4 J+ L
modelSchedule = new ScheduleImpl (getZone (), 1);
/ g n* `5 C& F modelSchedule.at$createAction (0, modelActions);* t ?+ ^+ M* z. C
/ Q( I n( l7 o* E
return this;; [4 q# t) {7 {2 m* c
} |